Ich versuche, die durchschnittlichen gewichteten Zinssätze von Darlehen in Python 2.7 zu berechnen.Python: Rundung zum nächsten 1/8%
Ich begann mit Schwimmern, und das war problematisch. Angesichts dieser Eingaben (Darlehen # 1 $ 20.000 6,80%; Darlehen # 2 $ 10.000 7,90%; Darlehen # 3 $ 10.000 5,41%) ist das korrekte Ergebnis 6.7275. Mit Decimal gibt mein Code das aus.
Allerdings sollte ich diese Nummer und Runde bis 0/auf die nächsten 1/8% nehmen und das Ergebnis stattdessen als 6,75 anzeigen. Wenn ich das Format verwende, um auf zwei Plätze zu runden, bekomme ich 6,73. Obwohl das ist, was ich erwarten würde, ist nicht der Umfang dessen, was diese Funktion tun sollte.
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')
Bearbeiten: Joachim Isakssons Vorschlag liefert den Ausgang, den ich mit den von mir bereitgestellten Eingängen angefordert habe. Ich habe das nicht ausführlich in meinem speziellen Anwendungsfall getestet, aber es beantwortet richtig die Frage, die ich gestellt habe.
# return format(intRate, '.2f')
z = intRate * 8
y = format(z, '.0f')
x = Decimal(y)/Decimal(8)
return x
Mit 8 multiplizieren, auf nächste Ganzzahl aufrunden, durch 8 dividieren? –
Ich bin sicher, du meinst auf die nächste '1/4', richtig? –
@pp_ Mir wurde speziell gesagt "nächste nächste 1/8%", aber die Person, die mich darum bittet, könnte einen Fehler gemacht haben. – Kilpatrick