![]() | 1 est 2019-10-21 11:06:30 +08:00 >>> (1.0).__floordiv__(0.1) 9.0 另外双下划线不推荐日常使用。 |
![]() | 2 chenstack OP @est 那说明是把 1 转换成 1.0 了,或者说是内部调用了(0.1).__rfloordiv__(1),那么问题来了,1.0 // 0.1 结果是 9.0,是怎么计算出来的 |
![]() | 3 datou 2019-10-21 11:22:17 +08:00 楼主应该是需要的 trunc 而不是 floor 吧? |
4 Northxw 2019-10-21 11:28:31 +08:00 ![]() 随便搜了下,大概看了下,分享给你: https://blog.csdn.net/huzq1976/article/details/51581330 |
![]() | 6 msg7086 2019-10-21 14:43:09 +08:00 >>> 1.0 // 0.1 9.0 >>> 1.000000000000001 // 0.1 10.0 懂了吗? 这里的「 0.1 」是要比 0.1 大的。二进制下的 0.1 是一个循环小数,循环小数在有限精度下必然丢失精度,所以「 0.1 」是不等于 0.1 的。 |
![]() | 7 msg7086 2019-10-21 14:44:12 +08:00 >>> 1.0-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1 1.3877787807814457e-16 |