gpt4 book ai didi

小数选项大于 2 的 python np.round()

转载 作者:太空狗 更新时间:2023-10-29 21:17:28 26 4
gpt4 key购买 nike

Python 有默认的 round() 函数,但我用 cython 编程,想用 numpy 函数替换 pythonic 代码。但是,在终端中进行实验时,我得到了以下结果。

>>> np.around(1.23456789)
1.0
>>> np.around(1.23456789, decimals=0)
1.0
>>> np.around(1.23456789, decimals=1)
1.2
>>> np.around(1.23456789, decimals=2)
1.23
>>> np.around(1.23456789, decimals=3)
1.2350000000000001
>>> np.around(1.23456789, decimals=4)
1.2345999999999999

这有点奇怪,我仍然想要以下“期望的”结果:

>>> round(1.23456789,3)
1.235
>>> round(1.23456789,4)
1.2346

最佳答案

问题是 float 的二进制表示不能准确表示大多数十进制数。例如,最接近 1.235 的两个值是:

  • 1.2350000000000000976996261670137755572795867919921875
  • 1.234999999999999875655021241982467472553253173828125

因为第一个更接近期望值,所以它是你得到的。

当您让 Python 环境显示 float 时,它会使用 __repr__ 转换函数来显示足够的数字以明确识别该数字。如果您改用 __str__ 转换,它应该将数字四舍五入到合理的位数。至少那是内置的 float 类型所做的,我假设 numpy 的工作方式相同。 print 函数默认调用 __str__,所以试试这个:

print np.around(1.23456789, decimals=3)

对于绝对需要小数精度的应用程序,可以使用 decimal module 。它还可以进行舍入。

关于小数选项大于 2 的 python np.round(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com