[英]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.