Python 将小数点限制在特定位置(不是圆形)

标签 python pandas numpy decimal

我想将小数点限制到特定位置(不是圆形)。例如 1.5551.55 而不是 1.56pandasnumpy 是否有更好/内置的方式?这是我能想到的唯一方法。

import numpy as np

a = np.array([1.555, 2.559])

precision = 2
adj = 10 ** precision
np.floor(a * adj) / adj

array([ 1.55,  2.55])

最佳答案

对于数组,您不想使用字符串格式化方法。

In [175]: a = np.array([1.555, 2.559])
In [176]: a*100
Out[176]: array([ 155.5,  255.9])
In [177]: (a*100).astype(int)
Out[177]: array([155, 255])
In [178]: (a*100).astype(int)/100
Out[178]: array([ 1.55,  2.55])

因为 float 不精确,您可能会得到一些“错误”的结果,其中截断的值会少一个数字。


一个小的“保护”值可能就足够了(如果某些值是负数,则必须是一个具有相应正负值的数组):

In [179]: (a*100+.01).astype(int)/100
Out[179]: array([ 1.55,  2.55])

保护值的人工测试用例:

In [65]: a = np.array([1.555, 2.559, 1.25-1e-10])
In [66]: a
Out[66]: array([ 1.555,  2.559,  1.25 ])
In [67]: (a*100).astype(int)/100
Out[67]: array([ 1.55,  2.55,  1.24])
In [68]: (a*100+.01).astype(int)/100
Out[68]: array([ 1.55,  2.55,  1.25])

关于Python 将小数点限制在特定位置(不是圆形),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44187527/

相关文章:

python - PySpark DataFrame 中行作为新列的模式

python - 使用 python-instagram 库获取最新的 Instagram 用户照片

python - 以前未见过的 Web 元素引用

python - 在 pandas apply 方法中,根据条件复制行

python - 如何从fastapi中的另一个api调用一个api?

python - 如何将 Format 对象应用于 pandas 中的索引值

python - 我怎样才能解决下面的这些错误?

python - Numpy 多维数组中轴上 "True"值的最大数量

python - np.vectorize 在二维 numpy 数组作为输入上失败

python - 空 numpy 数组 bool 矛盾