关于int型和float型相乘的问题

问题描述,比如int a = 58   如果直接用a*0.006在我的代码里运行出来是0.34800000000000003 而我们手算,结果应该是0.348?

为什么会出现这样的情况呢,因为0.006是一个float型的数据,我们看它是0.006,但是他在内在里就不一定是0.006,它可以是0.00599999999999999,或者0.006000000000000001,因为浮点型的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;也就是说float型可能存在一位是不能保证有效的,所以就会出现上面那种情况了

猜你喜欢

转载自mlj-pp.iteye.com/blog/2297892