我有以下代码:
function Extenso(nb: real); string;
var
total: real;
begin
total := Trunc(nb);
...
Result := ...;
end;
此函数返回一个字符串,描述完整的数字,对于没有分数的国家,因此是Trunc。
当输入param nb以790209.00(我的错误情况,小数为0)进来时,奇怪的是Trunc的结果在调试器上 790208 。有人可以试着解释一下吗?!?我正在使用Delphi XE3更新2,IDE修订包5.93,Windows 10 Pro 64。
编辑:作为对问题的澄清,此处涉及业务规则,客户将接受结果,但不会结束。感谢@Dsm和@CraigYoung致谢。
答案 0 :(得分:3)
你需要在这里使用round而不是trunc。对于类型为real,该值不是很精确,因此790209.00可能确实是790208.999999999,并且对其进行中断将给出显示的值。当然,如果你的值可能以.5结尾,那么舍入可能不会给你你想要的每一次,你可能需要考虑一些函数,如
Trunc( nb + 0.000001);