gpt4 book ai didi

python - 四舍五入到小数点

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:53 26 4
gpt4 key购买 nike

R 默认使用 round half to evenround() 函数上。但当四舍五入到定义的小数位数时,它似乎并不总是正确的:

# R code
round(1.225,2)
#[1] 1.23
round(1.2225,3)
#[1] 1.222
round(1.22225,4)
#[1] 1.2223
round(1.222225,5)
#[1] 1.22222

对比python,使用decimal模块:

# Python code
import decimal
a = decimal.Decimal("1.225")
b = decimal.Decimal("1.2225")
c = decimal.Decimal("1.22225")
d = decimal.Decimal("1.222225")

a.quantize(decimal.Decimal('1.00'), decimal.ROUND_HALF_EVEN)
#Decimal('1.22')
b.quantize(decimal.Decimal('1.000'), decimal.ROUND_HALF_EVEN)
#Decimal('1.222')
c.quantize(decimal.Decimal('1.0000'), decimal.ROUND_HALF_EVEN)
#Decimal('1.2222')
d.quantize(decimal.Decimal('1.00000'), decimal.ROUND_HALF_EVEN)
#Decimal('1.22222')

来自 python 十进制库文档,关于 quantize功能:

Return a value equal to the first operand after rounding and having the exponent of the second operand.

我不确定我是否正确,但看起来 python 结果是正确的。

问题:

哪一个是正确的,如何使用这两种语言获得正确的结果?

最佳答案

问题是浮点值的有限精度:

>>> '%.18f' % 1.225
'1.225000000000000089'
>>> '%.18f' % 1.2225
'1.222499999999999920'
>>> '%.18f' % 1.22225
'1.222250000000000059'
>>> '%.18f' % 1.222225
'1.222224999999999895'

Python 十进制类在这个意义上是准确的。

关于python - 四舍五入到小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962575/

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