che*_*art 3 python decimal rounding
我正在尝试使用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')
Run Code Online (Sandbox Code Playgroud)
这里的关键部分是第一次调用:x.quantize(Decimal('1'), rounding=ROUND_HALF_UP)给出x四舍五入到最接近的整数,给定的舍入模式.第一个参数(Decimal('1'))确定舍入结果的指数,因此如果用eg替换它,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')
Run Code Online (Sandbox Code Playgroud)
我看不出任何有理由偏爱另一种解决方案.
| 归档时间: |
|
| 查看次数: |
4977 次 |
| 最近记录: |