今天在两个double型变量求和时发现一个很奇怪的问题。问题如下:
0.35+0.32=0.66999999999999993
系统环境:32位XP
开发环境:vs2010
调试时用 “即时窗口”运算也会出现这个问题。
类似的还有
0.35+0.31=0.65999999999999992
0.25+0.21=0.45999999999999996
想明白其中的原理,或者这是个编译器的bug?望大神指教
Decimal http://www.cnblogs.com/yanweidie/p/3561065.html
这个好像是某个特殊的数数学运算后, 编辑器自动获取到的这个数;如果你想要获取到原数,也就是0.35+0.31=0.66的样子你最好用BigInteger类似的大类型
的类来处理。
这就是精度的问题,double 在大多数平台上都有,这不是 Bug。
所以,如在做 double 和 float 和 零比较时, 不能直接使用等于零,而是要使用小于某个范围,如 0.000001 后就认为是零。