簡體   English   中英

Python:四舍五入到最接近的 1/8%

[英]Python: Rounding to Nearest 1/8%

我正在嘗試計算 Python 2.7 中貸款的平均加權利率。

我從花車開始,這是有問題的。 鑒於這些輸入(貸款 #1 $20,000 6.80%;貸款 #2 $10,000 7.90%;貸款 #3 $10,000 5.41%),正確的結果是 6.7275。 使用十進制,我的代碼輸出。

然而,我應該拿那個數字和回合起來精確到 1/8% 並將結果顯示為 6.75。 當我使用格式四舍五入到兩個位置時,我得到 6.73。 雖然這是我所期望的,但不符合此功能應該做的范圍。

from decimal import Decimal

def weightedAvgFixedArgs(r1,r2,r3,b1,b2,b3):
    rates = [Decimal(r1),Decimal(r2),Decimal(r3)]
    balances = [Decimal(b1),Decimal(b2),Decimal(b3)]

    a = Decimal(b1) * Decimal(r1)
    b = Decimal(b2) * Decimal(r2)
    c = Decimal(b3) * Decimal(r3)

    perLoanWghtFctr = a + b + c

    totalLoanAmt = sum(balances)

    intRate = (perLoanWghtFctr / totalLoanAmt) * 100

    return format(intRate, '.2f')

編輯:Joachim Isaksson 的建議提供了我要求的輸出以及我提供的輸入。 我沒有在我的特定用例中對此進行過廣泛的測試,但它正確地回答了我提出的問題。

# return format(intRate, '.2f')
z = intRate * 8
y = format(z, '.0f')
x = Decimal(y) / Decimal(8)
return x

向上取整至最接近的 1/8%:

import math

>>> math.ceil(.73 * 8) / 8
0.75

>>> math.ceil(.76 * 8) / 8
0.875

如果你明確告訴圍捕,你應該使用上限

import math

x = 6.7275
x = math.ceil(x * 8)/8  # x == 6.75

計算加權平均利率時,您必須四舍五入。
關於與利率相關的計算的一些來源:

我認為這是做你所要求的最好的方法:

import math
x = 6.73
math.ceil(x / (1/8)) * (1/8)

我個人沒有明確(數學)解釋為什么先進行乘法然后除法也有效。 或者使用值 8 而不是 1/8。 下面的例子似乎也有效:

math.ceil(x * (8)) / 8

兩者都有效。 在第一個示例中,您可以將其用作給定值,即 (1/8),而在第二個示例中,您可以將 ut 用作整數,在本例中為 8。

如果您只想四舍五入到最接近的 1/8%(而不是像預期的那樣四舍五入到最接近的 1/8%),那是另一種情況。

根據需要乘以 8、舍入或截斷,然后除以 8,這是示例代碼:

for i in range(0,10):
    v = i/10.0
    v = round(v*8) / 8.0
    print i/10.0, v

運行它你會得到:

0.0 0.0
0.1 0.125
0.2 0.25
0.3 0.25
0.4 0.375
0.5 0.5
0.6 0.625
0.7 0.75
0.8 0.75
0.9 0.875

暫無
暫無

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

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