簡體   English   中英

python小數 - 使用ROUND_HALF_UP舍入到最接近的整數美元(無分錢)

[英]python decimals - rounding to nearest whole dollar (no cents) - with ROUND_HALF_UP

我正在嘗試使用Decimal.quantize()來實現以下目標: -

對於任何金額,表示為默認精度的python小數,我想使用decimal.ROUND_HALF_UP對其進行舍入,以便在舍入后沒有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')替換它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')

我看不出任何有理由偏愛另一種解決方案。

我這樣做了:

def currenctyUSD(val):
  valint = int(val)
  if float(val) > float(valint):
    valint = valint + 1
  return '{0:.2f}'.format(float(valint));

如果原始浮點值大於float(int(val))那么原始浮點數有一些美分:)所以我們需要加1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM