提问人:alexfilexpo 提问时间:6/30/2023 更新时间:6/30/2023 访问量:45
将较大的 int 值转换为浮点数,不向上舍入 [duplicate]
Casting large int value to float with no round up [duplicate]
问:
今天我发现将 int 转换为浮点具有非常有趣的精度和舍入规则。 我有几个数字给了我意想不到的结果:
float(1641016854000000000) -> 1.641016854e+18 (as expected)
float(1641016854000000100) -> 1.641016854e+18 (expected 1.6410168540000001e18)
float(1641016854000000200) -> 1.6410168540000003e+18 (expected 1.6410168540000002e+18)
float(1641016854000000300) -> 1.6410168540000003e+18 (as expected)
float(1641016854000000400) -> 1.6410168540000005e+18 (expected 1.6410168540000004e+18)
所以我的问题是:
- 如何防止值四舍五入?
- 如何获得预期的结果而不是我现在拥有的结果?
答:
1赞
TheDeafOne
6/30/2023
#1
与大多数语言一样,Python 的默认浮点类型只能如此精确以节省内存。这就是为什么在处理极其精确的数字时会出现浮点错误的原因。 避免这种情况的一个好方法是使用 python 的 decimal 库。
上一个:Powershell 中点舍入
下一个:舍入浮点值不保留舍入小数点
评论
float
s 只有这么高的精度;如果需要更多,请使用其他类型。1.6410168540000003e-18
float
float2bin
0b1
bin2float
...2
...4
...3