我一直在解决 UVA 中的编程挑战并遇到了这个问题,这真的很奇怪。这是有缺陷的代码:
program WTF;
begin
WriteLn(Trunc(2.01 * 100));
ReadLn();
end.
显然,我需要得到201
as Integer
,但我得到200
了,发生这种情况是因为 Double 以某种方式不存储确切的值......这是2.01 = 2.00(9)
出于我不知道的原因,有人可以解释这一点并提供解决方案吗?
编辑:然而,我认为使用Round()
而不是Trunc()
修复这个......但是,为什么Trunc()
不起作用?