Python中浮点数取余异常咨询:为何0.03%0.01结果为0.01而非0?
浮点数取余的精度陷阱
- 问题根源在于二进制浮点数无法精确表示部分十进制小数,存储的是近似值,导致取余结果不符合直觉。
- 像
0.1、0.01这类十进制小数,在二进制中是无限循环的,计算机存储时只能保留近似值(比如0.1实际存储为0.10000000000000000555...)。 - 计算
0.3 % 0.1时,实际是用近似的0.3(约0.2999999999999999889...)除以近似的0.1,商并非精确的3,而是略小于3的数值,因此取余后得到接近0.1的结果,最终显示为0.1。 0.03 % 0.01同理,两个数的存储误差导致余数不是0,而是近似0.01的数值。- 整数
3和1能被二进制精确表示,所以3 % 1的结果是精确的0。
如果要规避这类问题,可以使用专门的十进制精确运算工具(比如Python的decimal模块、Java的BigDecimal类),或者将小数转换为整数计算后再还原。
内容的提问来源于stack exchange,提问作者wen wu
相关产品推荐
相关产品推荐

