━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
这样,我自己写了一个round函数,对 double(2140)-double(2140)=-9.09494701772928E-13 的科学计数法 结果进行保留2位小数舍入。
但是舍入函数忽略了后面的差值的 -13次方,也就是说实际上小数点后面前13位都是0,用的是科学计数法表示,所以直接截取结果位-9.10
这个坑真的很深
首先double的数,看到的跟事实是两回事,例如2140 实际上可能是2140.00000000000033 或者2140.00000000000088
解决方案就是人为设定精度,某个数的绝对值在多少范围内,就认为它是0
对于本案例,就避免科学计数法,我们采用Format方式避免:
采用保留7位小数的double值
oldRound(strtofloat(Format('%.7f', [MainForm.ADO_Temp.FieldByName('含税金额').AsFloat - MainForm.ADO_Temp.FieldByName('不含税金额').AsFloat])), 2);
var
lStr: String;
begin
lStr := '0.0000000';
lStr := FloatToStr(StrToFloat(lStr)); //输出:字符串为0
end;