Delphi中的一些操作
保留小数位数:在http://blog.yesky.com/276/zabh/1531276.shtml这里有关于四舍五入的详细分析。摘过来一个函数可以用到的。
function RoundEx(Value: Extended; RoundMode: TFPURoundingMode = rmUp): Int64;
var
RM: TFPURoundingMode;
begin
RM := GetRoundMode;
try
SetRoundMode(RoundMode);
Result := Round(Value);
finally
SetRoundMode(RM);
end;
end;
经过测试发现上面的函数依然不能解决问题,上面函数设置了浮点数截取方向后,CPU会一直按照该方向进行截取并不是进行四舍五入的算法,举例:RoundEx(12.01)=13,这种算法适用于向上截取浮点数。
自行解决问题:
function RoundEx2(Value:real):Integer;
var
fValue:Real;
begin
fValue = Abs(Value);
if (fValue-Trunc(fValue))<0.5 then
Result := Trunc(fValue)
else
Result := Trunc(fValue)+1;
end;
if Value <0 then Result := -Result;
end;
function RoundEx(Value: Extended; RoundMode: TFPURoundingMode = rmUp): Int64;
var
RM: TFPURoundingMode;
begin
RM := GetRoundMode;
try
SetRoundMode(RoundMode);
Result := Round(Value);
finally
SetRoundMode(RM);
end;
end;
经过测试发现上面的函数依然不能解决问题,上面函数设置了浮点数截取方向后,CPU会一直按照该方向进行截取并不是进行四舍五入的算法,举例:RoundEx(12.01)=13,这种算法适用于向上截取浮点数。
自行解决问题:
function RoundEx2(Value:real):Integer;
var
fValue:Real;
begin
fValue = Abs(Value);
if (fValue-Trunc(fValue))<0.5 then
Result := Trunc(fValue)
else
Result := Trunc(fValue)+1;
end;
if Value <0 then Result := -Result;
end;