3 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
8.833333333339(或8.833333333333334的結(jié)果106.00/12)正確舍入為小數(shù)點(diǎn)后兩位8.83。從數(shù)學(xué)上來(lái)說(shuō),這聽(tīng)起來(lái)像是您想要的天花板功能。Python math模塊中的一個(gè)名為ceil:
import math
v = 8.8333333333333339
print(math.ceil(v*100)/100) # -> 8.84
地板和天花板函數(shù)通常分別將實(shí)數(shù)映射到小數(shù)位數(shù)為零的最大的前一個(gè)或最小的后整數(shù)–因此,將它們用于2個(gè)小數(shù)位,首先將數(shù)字乘以10 2(或100)即可將小數(shù)點(diǎn)后移點(diǎn),然后除以它以進(jìn)行補(bǔ)償。
如果math由于某種原因不想使用該模塊,則可以使用我剛剛編寫(xiě)的這個(gè)(經(jīng)過(guò)最低測(cè)試的)實(shí)現(xiàn):
def ceiling(x):
n = int(x)
return n if n-1 < x <= n else n+1
這如何適用于鏈接的貸款和付款計(jì)算器問(wèn)題
從樣本輸出中可以看出,他們對(duì)每月付款進(jìn)行了四舍五入,這就是許多人所說(shuō)的上限功能的效果。這意味著每個(gè)月略多于1 / 12的總量被支付。這樣一來(lái),末期付款就比平時(shí)少了一點(diǎn),因此剩余的未付余額僅為8.76。
使用正常的四舍五入產(chǎn)生每月付款8.83和稍高的最終付款同樣有效8.87。但是,在現(xiàn)實(shí)世界中,人們通常不希望增加自己的付款,因此對(duì)每筆付款進(jìn)行四舍五入是常見(jiàn)的做法-還會(huì)更快地將錢(qián)退還給貸方。

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
這是正?,F(xiàn)象(與Python無(wú)關(guān)),因?yàn)?.83不能完全表示為二進(jìn)制浮點(diǎn)數(shù),就像1/3不能完全以十進(jìn)制表示(0.333333 ... ad infinitum)一樣。
如果要確保絕對(duì)精度,則需要以下decimal模塊:
>>> import decimal
>>> a = decimal.Decimal("8.833333333339")
>>> print(round(a,2))
8.83

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
您想使用十進(jìn)制模塊,但還需要指定舍入模式。這是一個(gè)例子:
>>> import decimal
>>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_UP)
Decimal('8.34')
>>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
Decimal('8.33')
>>>
添加回答
舉報(bào)