Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 四舍五入到1dp给出了错误的数字_Python_Python 3.x_Pandas_Rounding - Fatal编程技术网

Python 四舍五入到1dp给出了错误的数字

Python 四舍五入到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

如何将一根柱子四舍五入到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   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
的答案对他们来说是有问题的。