2074.70* 100再转换为整数一直是207469,为什么会这样?
调试发现2074.70* 100的结果是207469.99999999997
这是计算机的通用BUG,就浮点数存储会变,不管是JS、C#都一样,只是C#把这个问题处理了,你可以写如下代码 float a=12.1F,然后用IL 反汇编程序打开一看,a的值居然是12.199999999999,前面在园子里有位大神详细解释了此事,现在找不到那贴子了。
嗯,我后来查了,是跟将float值转换为二进制过程有关系,也就是说内存中的浮点数其实都是近似数;所以在实际中不要将float参与逻辑运算
@J默: 是这个意思,二进制转换不了,只有以5结尾的可以表示出来,比如0.5,0.25,实际在处理浮点数时都是从.分为两段,然后分别处理,最后再加起来的。
因为它要保留N位精度,可以在后面加个很小的小数就可以了:
(int)((2074.70+0.000000001) * 100)
数据类型呗
parseInt(2074.70) * 100
很简单,举个例子:
1.0其实在数据库中不一定就是真是1.0 可能是 0.99999999999999999999或者是1.0000000000000001
如果需要精确的表示浮点数,请用decimal
decimal a = 1.23m
精度问题,浮点数都是不准确的, 可以使用 decimal类型。
楼上加一,用decimal