Python 四舍五入到1dp给出了错误的数字
如何将一根柱子四舍五入到1dpPython 四舍五入到1dp给出了错误的数字,python,python-3.x,pandas,rounding,Python,Python 3.x,Pandas,Rounding,如何将一根柱子四舍五入到1dp df value 0 0.45 1 0.45 df.value.round(1) 0.4 0.4 您可以利用python内置的round,以如下方式获得所需的结果 import pandas as pd df = pd.DataFrame({'value':[0.45,0.45]}) df['rounded'] = df.value.apply(lambda x:round(x,1)) print(df) 输出 value rounded 0
df value
0 0.45
1 0.45
df.value.round(1)
0.4
0.4
您可以利用python内置的
round
,以如下方式获得所需的结果
import pandas as pd
df = pd.DataFrame({'value':[0.45,0.45]})
df['rounded'] = df.value.apply(lambda x:round(x,1))
print(df)
输出
value rounded
0 0.45 0.5
1 0.45 0.5
对我来说,
pandas.Series.round
和内置的round
之间的差异有点令人惊讶,但这可能是因为对数字进行舍入的方法不止一种。这不仅限于python,例如描述5种不同的舍入模式。期望的结果是什么?正确答案是0。5@asd您使用的是二进制浮点,这意味着您看到的不是您得到的。四舍五入的实际值为0.4500000000111022302462565404236316680908203125
。在这种特殊情况下,正确的四舍五入应该是0.5
,但例如,正确的四舍五入也应该是0.85
(实际值0.849999999999997779553950749686919152736663818359375
,假设IEEE 754二进制64浮点格式和语义)四舍五入0.8
,而不是0.9
。如果您的应用程序关心这些接近一半的情况下的舍入方向,则需要重新评估浮点的使用。不幸的是,虽然这对值0.45
“起作用”,但这通常不是一个好方法。例如,round(0.25,1)
将给出0.2
,这几乎肯定不是OP想要的。真正的答案是从更好地理解浮点开始的,还有一个问题(由OP来回答)就是为什么0.4
的答案对他们来说是有问题的。