Delphi Trunc表现得很奇怪

时间:2017-03-29 14:25:09

标签: delphi

我有以下代码:

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致谢。

1 个答案:

答案 0 :(得分:3)

你需要在这里使用round而不是trunc。对于类型为real,该值不是很精确,因此790209.00可能确实是790208.999999999,并且对其进行中断将给出显示的值。当然,如果你的值可能以.5结尾,那么舍入可能不会给你你想要的每一次,你可能需要考虑一些函数,如

Trunc( nb + 0.000001);