碰到一个奇怪的BUG,如下代码
double a =0.58 ;
int b = (int)(a * 100);
结果是b=57,
因为a*100 = 57.9999993
为什么?实在想不通。(目前只发现57,58存在这个问题)
谢谢,解决倒是很容易,就是不知道为什么。而且不是每个数都这样。
@Müller: 这个问题说起来比较复杂,涉及到浮点数的二进制表示法,如果你有时间的话,可以转成二进制后再来计算,你就会发现问题了。顺便提一句,结果和第一位小数是 5 相关。
不仅是在C#中有这样的问题,在java中也会存在这样的问题,这是double的精度丢失问题
http://www.cnblogs.com/hongten/archive/2012/11/22/java_double.html
希望大家多多交流:hongtenzone@foxmail.com
double a =0.58 ;
这个在计算机中可能表示为0.58000000000
也有可能是 0.579999999999