Ich bekomme viele Dezimalstellen in der Ausgabe dieses Codes (Fahrenheit in Celsius Konverter).
Mein Code sieht derzeit 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()
Meine Frage ist also, wie mache ich das Programm um jede Antwort auf die 2. Dezimalstelle?
Antworten:
Sie können die
round
Funktion verwenden, die als erstes Argument die Zahl und als zweites Argument die Genauigkeit nach dem Dezimalpunkt verwendet.In Ihrem Fall wäre es:
quelle
round()
für Floats kann überraschend sein: Zum Beispielround(2.675, 2)
gibt2.67
statt der erwarteten2.68
. "round(2.675, 2)
die2.67
eher gibt als2.68
überhaupt nichts mit Bankers Rundung zu tun hat.Verwenden
str.format()
der Syntax von ' zur Anzeigeanswer
mit zwei Dezimalstellen (ohne den zugrunde liegenden Wert von zu ändernanswer
):Wo:
:
führt die Formatspezifikation ein0
Aktiviert das vorzeichenbewusste Null-Auffüllen für numerische Typen.2
setzt die Genauigkeit auf2
f
Zeigt die Nummer als Festkommazahl anquelle
0.5357...
ist näher0.54
als als0.53
, also0.54
macht das Runden auf Sinn."{:0.2f}".format(1.755)
-> 1,75"{:0.2f}".format(1.7551)
-> 1,76 - Allerdings hätte ich beide mit 1,76 gerechnet.Die meisten Antworten vorgeschlagen
round
oderformat
.round
Manchmal wird aufgerundet , und in meinem Fall musste der Wert meiner Variablen abgerundet und nicht nur als solcher angezeigt werden.Ich habe hier die Antwort gefunden: Wie runde ich eine Gleitkommazahl auf eine bestimmte Dezimalstelle auf?
oder:
quelle
round(2.354, 2) # -> 2.35
10**d
anstelle von verwendenint('1' + ('0' * d))
.quelle
Sie möchten Ihre Antwort abrunden.
round(value,significantDigit)
ist die übliche Lösung, um dies zu tun, jedoch funktioniert dies manchmal nicht so, wie man es aus mathematischer Sicht erwarten würde, wenn die Ziffer, die der Ziffer, auf die Sie runden, unmittelbar unter (links von) liegt, eine hat5
.Hier einige Beispiele für dieses unvorhersehbare Verhalten:
Angenommen, Sie beabsichtigen, die traditionelle Rundung für Statistiken in den Wissenschaften durchzuführen, ist dies ein praktischer Wrapper, damit die
round
Funktion wie erwartet funktioniert undimport
zusätzliche Dinge wie erforderlich sindDecimal
.Aha! Auf dieser Grundlage können wir also eine Funktion erstellen ...
Grundsätzlich fügt dies der Zeichenfolge einen wirklich kleinen Wert hinzu, um zu erzwingen, dass sie in unvorhersehbaren Fällen, in denen sie normalerweise nicht mit der
round
Funktion übereinstimmt, wenn Sie dies erwarten , ordnungsgemäß aufgerundet wird. Ein praktischer Mehrwert zu schaffen ist ,1e-X
woX
die Länge der Zahlenfolge ist sind Sie zu verwenden versuchen ,round
auf Plus1
.Der Ansatz der Verwendung
10**(-len(val)-1)
war bewusst, da er die größte kleine Zahl ist, die Sie hinzufügen können, um die Verschiebung zu erzwingen, und gleichzeitig sicherstellt, dass der hinzugefügte Wert die Rundung niemals ändert, selbst wenn die Dezimalstelle.
fehlt. Ich könnte nur10**(-len(val))
mit einer Bedingung verwenden,if (val>1)
um1
mehr zu subtrahieren ... aber es ist einfacher, immer die zu subtrahieren,1
da dies den anwendbaren Bereich von Dezimalzahlen, mit dem diese Problemumgehung richtig umgehen kann, nicht wesentlich ändert. Dieser Ansatz schlägt fehl, wenn Ihre Werte die Grenzen des Typs erreichen. Dies schlägt fehl, aber für fast den gesamten Bereich gültiger Dezimalwerte sollte er funktionieren.Der fertige Code lautet also wie folgt:
... sollte Ihnen die Ergebnisse liefern, die Sie erwarten.
Sie können auch die Dezimalbibliothek verwenden, um dies zu erreichen. Der von mir vorgeschlagene Wrapper ist jedoch einfacher und kann in einigen Fällen bevorzugt werden.
Edit: Danke Blckknght für den Hinweis, dass der Randfall hier
5
nur für bestimmte Werte auftritt .quelle
Verwenden Sie einfach die Formatierung mit% .2f, um auf 2 Dezimalstellen abzurunden.
quelle
Sie können den Zeichenfolgenformatierungsoperator von Python "%" verwenden. "% .2f" bedeutet 2 Nachkommastellen.
http://docs.python.org/2/library/stdtypes.html#string-formatting
quelle
Sie können den runden Operator für bis zu 2 Dezimalstellen verwenden
quelle
Sie können die Rundungsfunktion verwenden.
wird Ihnen eine Antwort von 80.234 geben
In Ihrem Fall verwenden
Hoffe das hilft :)
quelle
Wenn Sie ein Gleitkomma-Problem vermeiden müssen beim Runden von Zahlen für die Abrechnung , können Sie numpy round verwenden.
Sie müssen numpy installieren:
und der Code:
druckt
Sie sollten dies verwenden, wenn Sie Geld mit legaler Rundung verwalten.
quelle
Hier ist ein Beispiel, das ich verwendet habe:
quelle
Ich weiß nicht warum, aber das Format '{: 0.2f}' (0.5357706) gibt mir '0.54'. Die einzige Lösung, die für mich funktioniert (Python 3.6), ist die folgende:
quelle
Wie Sie Ihre Antwort in Dezimalzahl , so dass Sie nicht brauchen , Ihre typisieren Antwort Variable str in DruckenC () Funktion.
Verwenden Sie dann die String-Formatierung im printf-Stil
quelle
Die Antwort lautet: https://stackoverflow.com/a/29651462/8025086
quelle