Wie man die Runde auf 2 Dezimalstellen mit Python?
Ich bin immer eine Menge von Dezimalstellen in der Ausgabe von diesem code (Fahrenheit zu Celsius converter").
Mein code sieht derzeit ungefähr so aus:
def main():
printC(formeln(typeHere()))
def typeHere():
global Fahrenheit
try:
Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
except ValueError:
print "\nYour insertion was not a digit!"
print "We've put your Fahrenheit value to 50!"
Fahrenheit = 50
return Fahrenheit
def formeln(c):
Celsius = (Fahrenheit - 32.00) * 5.00/9.00
return Celsius
def printC(answer):
answer = str(answer)
print "\nYour Celsius value is " + answer + " C.\n"
main()
Also meine Frage ist, wie kann ich erfolgreich das Programm abrunden jeder Antwort auf 2 Nachkommastellen?
InformationsquelleAutor der Frage Dolcens | 2013-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Runde - Funktion nimmt als erstes argument die Zahl und das zweite argument ist die Präzision.
In deinem Fall wäre es:
InformationsquelleAutor der Antwort rolisz
Mit
str.format()
's syntax zu displayanswer
mit zwei Dezimalstellen (ohne änderung der zugrunde liegenden Wertanswer
):Wo:
:
stellt die format spec0
ermöglicht den Zeichen-bewusst zero-padding für numerische Datentypen.2
legt die Präzision zu2
f
zeigt die Zahl als eine Festkomma-ZahlInformationsquelleAutor der Antwort Johnsyweb
Ist die Frage gekennzeichnet: "wie Runde unten auf 2 Dezimalstellen"
Meisten Antworten vorgeschlagen
round
oderformat
.round
manchmal Runden, und in meinem Fall brauchte ich die Wert meiner variable immer abgerundet (nicht nur als solche dargestellt).Fand ich die wahr Antwort hier: Wie gerundet wird, eine floating-point-Zahl, bis zu einer bestimmten Nachkommastelle?
oder:
InformationsquelleAutor der Antwort s4w3d0ff
InformationsquelleAutor der Antwort Mahadi
Verwenden Sie einfach die Formatierung mit %.2f, die Ihnen Rundung auf 2 Dezimalstellen.
InformationsquelleAutor der Antwort Santosh Ghimire
Können Sie die string-Formatierung Betreiber von python "%".
"%.2f" bedeutet 2 stellen nach dem Komma.
http://docs.python.org/2/library/stdtypes.html#string-formatting
InformationsquelleAutor der Antwort arieli
Können Sie die Funktion Runden.
erhalten Sie eine Antwort von 80.234
In Ihrem Fall, verwenden Sie
Hoffe, das hilft 🙂
InformationsquelleAutor der Antwort Satyaki Sanyal
Hier ist ein Beispiel, das ich verwendet habe:
InformationsquelleAutor der Antwort Patrick Hill
Nicht sicher, warum, aber '{:0.2 f}'.format(0.5357706) gibt mir "0.54'.
Die einzige Lösung, die bei mir funktioniert (python 3.6), ist die folgende:
InformationsquelleAutor der Antwort Noam Peled
Wie Sie möchten, dass Ihre Antwort in Dezimalzahl, so dass Sie nicht brauchen, um Ihre festgelegten Antwort variable str in printC () - Funktion.
und verwenden Sie dann printf-style-String-Formatierung
InformationsquelleAutor der Antwort codiacTushki
Möchten Sie um Ihre Antwort.
round(value,significantDigit)
ist die gewöhnliche Lösung, um dies zu tun, aber diese manchmal funktioniert nicht, wie man erwarten würde von einer mathematischen Perspektive, wenn die Stelle sofort inferior (Links) die Ziffer, du bist Rundung auf eine5
.Hier einige Beispiele von diesem unberechenbaren Verhalten:
Vorausgesetzt Ihre Absicht ist es, das traditionelle Rundung für Statistik in den Naturwissenschaften, das ist eine bequeme wrapper um die
round
Funktion wie erwartet funktioniert müssenimport
extra Sachen wieDecimal
.Aha! Also auf dieser Basis können wir eine Funktion...
Im Grunde fügt einen wirklich kleinen Wert an den string, um ihn zu zwingen, Runden richtig auf die unvorhersehbaren Fälle, wo es nicht normalerweise mit der
round
Funktion, wenn Sie es erwarten. Ein praktischer Wert ist1e-X
woX
ist die Länge der Zahl string, den Sie versuchen zu verwendenround
auf plus1
.Den Ansatz der Verwendung von
10**(-len(val)-1)
war beabsichtigt, da es die größten kleinen Nummer, die Sie hinzufügen können, um zu zwingen die Umschalttaste, während auch sichergestellt wird, dass der Wert, den Sie hinzufügen, ändert sich nie die Rundung auch wenn die dezimal.
fehlt. Ich konnte nur10**(-len(val))
mit einem condiditionalif (val>1)
zu subtrahieren1
mehr... aber es ist einfacher einfach immer abziehen, die1
als dass sich nicht viel ändern, die geltenden Palette von Dezimalzahlen diese Problemumgehung ordnungsgemäß verarbeiten kann. Dieser Ansatz wird scheitern, wenn Ihre Werte an die Grenzen der Art, das wird nicht funktionieren, aber für fast den gesamten Bereich Gültiger decimal-Werte sollte es funktionieren.Also der fertige code wird dann sowas:
...sollten Ihnen die Ergebnisse, die Sie erwarten.
Können Sie auch die dezimal Bibliothek um dies zu erreichen, aber der wrapper, die ich vorschlagen, ist einfacher und kann bevorzugt werden, in einigen Fällen.
Edit: Dank Blckknght für den Hinweis, dass die
5
fringe Fall tritt nur für bestimmte Werte hier.InformationsquelleAutor der Antwort Jason R. Mick
Die Antwort ist von: https://stackoverflow.com/a/29651462/8025086
InformationsquelleAutor der Antwort buxizhizhoum