如何在python pandas中更准确地划分数字

How to divide numbers more accurately in python pandas

提问人:SomeUser12345634 提问时间:12/14/2022 更新时间:12/14/2022 访问量:87

问:

我正在尝试进行计算,将数字除以 0.05,然后截断所有数字。1034.55

如果我在 Windows 和 Android 计算器上执行 1034.55/0.05,它会得到 20691。然而,在 python 中,它给出了:

>>> 1034.55/0.05
20690.999999999996

当我截断小数位时,这比预期的要少一个数字。使用浮点数时,必须有最多 5 位的精度。

我如何在保持性能的同时解决由于浮点精度(?)而导致的舍入问题?我目前正在做chunk["index"] = np.trunc(chunk["num"] / 0.05)

我尝试先将数字乘以 100000 以尝试对整数进行数学运算,但这在性能上增加了太多延迟。我也看到一个模块,但这不会像numpy那么快?import doubles

python pandas numpy 精度

评论

1赞 John Coleman 12/14/2022
为什么不乘以而不是除以?200.05
0赞 Giacomo Catenazzi 12/14/2022
出于同样的原因,在会计(金融、银行等)中,他们使用整数(例如美分数,或“毫美元”或类似的东西(所以“固定小数点”)。如果您知道 0.05 是最小单位:只需使用它的因子(并且您转换为浮点数仅用于显示和数字)

答:

1赞 gtomer 12/14/2022 #1

要将其四舍五入到最接近的整数,请使用:round()

int(round(num/0.05),5))
0赞 smyril 12/14/2022 #2

您可以使用内置函数将其四舍五入到最接近的整数。round()

或者,您可以使用数学库中的函数(始终为较大数字)和(始终为较小数字)指定它是四舍五入到较大还是较小的数字:ceil()floor()

from math import floor, ceil

mynumber = floor(mynumber)
mynum = ceil(mynum)

import math

mynumber = math.floor(mynumber)
mynum = math.ceil(mynum)