2009年5月29日

Delphi 的四捨五入

在 Form 上放入一個 TMemo

uses
Math;

// 參考 SimpleRoundTo 來寫的四捨五入,和 format 的結果相同
function MyRoundTo(const AValue: Extended; const ADigit: TRoundToRange = -2): Extended;
var
LFactor: Extended;
f: Extended;
begin
LFactor := IntPower(10, ADigit);
if AValue < 0 then
f := -0.5
else
f := 0.5;
Result := Trunc((AValue / LFactor) + f) * LFactor;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with Memo1.Lines do
begin
Clear;
Add('RoundTo 0.12345 小數四位 = ' + FloatToStr(RoundTo(0.12345, -4)));
Add('RoundTo -0.12345 小數四位 = ' + FloatToStr(RoundTo(-0.12345, -4)));
Add('RoundTo 123450 捨十位 = ' + FloatToStr(RoundTo(123450, 2)));
Add('SimpleRoundTo 0.12345 小數四位 = ' + FloatToStr(SimpleRoundTo(0.12345, -4)));
Add('SimpleRoundTo -0.12345 小數四位 = ' + FloatToStr(SimpleRoundTo(-0.12345, -4)));
Add('SimpleRoundTo 123450 捨十位 = ' + FloatToStr(SimpleRoundTo(123450, 2)));
Add('MyRoundTo 0.12345 小數四位 = ' + FloatToStr(MyRoundTo(0.12345, -4)));
Add('MyRoundTo -0.12345 小數四位 = ' + FloatToStr(MyRoundTo(-0.12345, -4)));
Add(Format('Format 0.12345 小數四位 = %.4f', [0.12345]));
Add(Format('Format -0.12345 小數四位 = %.4f', [-0.12345]));
end;
end;

{ Memo1 的結果
RoundTo 0.12345 小數四位 = 0.1234
RoundTo -0.12345 小數四位 = -0.1234
RoundTo 123450 捨十位 = 123400
SimpleRoundTo 0.12345 小數四位 = 0.1234
SimpleRoundTo -0.12345 小數四位 = -0.1233
SimpleRoundTo 123450 捨十位 = 123500
MyRoundTo 0.12345 小數四位 = 0.1235
MyRoundTo -0.12345 小數四位 = -0.1235
Format 0.12345 小數四位 = 0.1235
Format -0.12345 小數四位 = -0.1235
}

沒有留言:

網誌存檔