>>>32.343%10.3430000000000035>>>0.343%10.343>>>0.343%1==32.343%1False额,为什么0.343%1!=32.343%1???
2 回答
Qyouu
TA贡献1786条经验 获得超11个赞
一个是0.3430000000000035,一个是0.343,当然不相等至于为啥是0.3430000000000035这个涉及到浮点数的精度问题,计算机中二进制无法精确表示绝大多数有限不循环小数,所以虽然你看到0.343和32.343的十进制小数部分是一样的,但是转化成二进制,两个数字没有一点相似的部分追根究底,请GoogleIEEE754
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
如果说原因的话,就是这个数字无法表示为一个二进制有限小数。原理是这样的:将一个十进制最简分数x/y化为一个n进制小数z,令集合A为y的所有因数的集合,集合B为n的所有质因数的集合,那么z为有限小数的充要条件是A为B的子集。举例说明:对于一个最简分数,如果其分母的所有因数中,没有除了2和5以外的其他任何数,那么它就能用一个十进制有限小数来表示。例如1/4可以表示为0.25,1/10可以表示为0.1,1/20可以表示为0.05等等。同理,对于一个最简分数,如果其分母的所有因数中,没有除了2以外的其他任何数,那么它就能用一个二进制有限小数来表示。例如1/2可以表示为0.1,1/4可以表示为0.01,1/8可以表示为0.001,但是1/10就无法这样表示,只能表示为0.0001100110011...如果说解决方法的话,推荐使用Decimal(),效果如下:>>>Decimal(32.343)Decimal('32.3430000000000035')>>>Decimal('32.343')Decimal('32.343')
添加回答
举报
0/150
提交
取消