我想将小数点限制到特定位置(不是圆形)。例如 1.555
到 1.55
而不是 1.56
。 pandas
或 numpy
是否有更好/内置的方式?这是我能想到的唯一方法。
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/