python % 的问题

>>>32.343%1
0.3430000000000035
>>>0.343%1
0.343
>>>0.343%1==32.343%1
False
额,为什么0.343%1!=32.343%1???
阿波罗的战车
浏览 554回答 2
2回答

Qyouu

一个是0.3430000000000035,一个是0.343,当然不相等至于为啥是0.3430000000000035这个涉及到浮点数的精度问题,计算机中二进制无法精确表示绝大多数有限不循环小数,所以虽然你看到0.343和32.343的十进制小数部分是一样的,但是转化成二进制,两个数字没有一点相似的部分追根究底,请GoogleIEEE754

蝴蝶刀刀

如果说原因的话,就是这个数字无法表示为一个二进制有限小数。原理是这样的:将一个十进制最简分数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')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript