gpt4 book ai didi

python 小数 - 四舍五入到最接近的整数美元(无美分) - 使用 ROUND_HALF_UP

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

我正在尝试使用 Decimal.quantize() 来实现以下目标:-

对于任何金额,以默认精度的 python 小数表示,我想使用 decimal.ROUND_HALF_UP 对其进行四舍五入,以便四舍五入后没有美分。

例如,给定 1.25,我试图获得 1.00(表示没有美分)

给定 1.49 我正在尝试获得 1.00

给定 1.50 我想获得 2.00

给定 1.87 我正在尝试获得 2.00

给定 2.00 我正在尝试获得 2.00

所以美分有两个范围——0 美分到 49 美分;和 50 美分到 99 美分。对于 49 美分,我想向下舍入,对于 50 美分及以上,我想向上舍入。我试图获得具有两位有效小数位的结果(始终为 00)。

我这里没有任何负值要处理。我如何四舍五入我的美元以获得我想要的金额?除了 quantize 之外还有其他选项吗?

最佳答案

我会尝试如下操作:

>>> from decimal import Decimal, ROUND_HALF_UP
>>> x = Decimal('2.47')
>>> x.quantize(Decimal('1'), rounding=ROUND_HALF_UP).quantize(Decimal('0.01'))
Decimal('2.00')

这里的关键部分是第一个调用:x.quantize(Decimal('1'), rounding=ROUND_HALF_UP)x 四舍五入到最接近的整数,给定的舍入模式。第一个参数 (Decimal('1')) 确定舍入结果的指数,因此如果您将其替换为例如 Decimal('0.1') 它会四舍五入到最接近的十分之一,如果您用 Decimal('1e1') 替换它,它会四舍五入到最接近的 10 的倍数。

然后第二个 quantize 调用只是将额外的两位小数放回原处,这样您就可以得到 Decimal('2.00') 而不是 Decimal (2).

如果需要,您还可以使用 to_integral_value 方法代替第一次量化调用:

>>> x.to_integral_value(rounding=ROUND_HALF_UP).quantize(Decimal('0.01'))
Decimal('2.00')

我看不出有任何充分的理由偏爱其中一种解决方案。

关于python 小数 - 四舍五入到最接近的整数美元(无美分) - 使用 ROUND_HALF_UP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935661/

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