当前位置:  开发笔记 > 编程语言 > 正文

测试浮点数是否为整数

如何解决《测试浮点数是否为整数》经验,为你挑选了4个好方法。

这段代码有效(C#3)

double d;
if(d == (double)(int)d) ...;

    有一个更好的方法吗?

    由于无关紧要的原因,我想避免双重演员; 除此之外还有什么好方法?(即使它们不那么好)

注意:有几个人指出(重要的)点= =经常有问题重新浮点数.在这种情况下,我期望值在0到几百的范围内,它们应该是整数(非整数是错误),所以如果这些点"不应该"对我来说是一个问题.



1> 小智..:
d == Math.Floor(d)

换句话说,做同样的事情.

注意:希望你知道做这种事情时你必须非常小心; 浮点/双打很容易积累微小的错误,使得精确的比较(如此)失败没有明显的原因.



2> VoxPelli..:

这会工作我认为:

if (d % 1 == 0) {
  //...
}



3> Khoth..:

如果你的双倍是另一个计算的结果,你可能想要这样的东西:

d == Math.Floor(d + 0.00001);

这样,如果出现轻微的舍入错误,它仍将匹配.



4> ddaa..:

我不能回答问题的C#特定部分,但我必须指出你可能错过了浮点数的一般问题.

通常,浮点数上没有很好地定义整数.出于同样的原因,在浮点数上没有很好地定义相等性.浮点计算通常包括舍入和表示错误.

例如,1.1 + 0.6 != 1.7.

是的,这就是浮点数的工作方式.

在这里,1.1 + 0.6 - 1.7 == 2.2204460492503131e-16.

严格来说,与浮点数相比,最接近相等比较的是将它们与选定的精度进行比较.

如果这还不够,则必须使用十进制数表示,具有内置错误范围的浮点数表示或符号计算.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有