Ik krijg veel decimalen in de uitvoer van deze code (omzetter van Fahrenheit naar Celsius).
Mijn code ziet er momenteel zo uit:
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()
Dus mijn vraag is, hoe kan ik ervoor zorgen dat het programma elk antwoord op de 2e decimaal afrondt?
Antwoord 1, autoriteit 100%
U kunt de functie round
gebruiken, die als eerste argument het getal neemt en als tweede argument de precisie achter de komma.
In jouw geval zou dat zijn:
answer = str(round(answer, 2))
Antwoord 2, autoriteit 20%
str.format()
‘s syntaxis om weer te geven answer
met twee decimalen (zonder de onderliggende waarde van answer
te wijzigen):
def printC(answer):
print("\nYour Celsius value is {:0.2f}?C.\n".format(answer))
Waar:
:
introduceert de formaatspecificatie0
maakt sign-aware zero-padding voor numerieke typen mogelijk.2
stelt de precisie tot2
f
geeft het nummer weer als een getal met een vaste komma
Antwoord 3, autoriteit 9%
De meeste antwoorden suggereerden round
of format
. round
rondt soms naar boven af, en in mijn geval moest ik de waarde van mijn variabele naar beneden afronden en niet alleen als zodanig weergeven.
round(2.357, 2) # -> 2.36
Ik heb het antwoord hier gevonden: Hoe rond ik een getal met drijvende komma af tot een bepaalde decimale plaats?
import math
v = 2.357
print(math.ceil(v*100)/100) # -> 2.36
print(math.floor(v*100)/100) # -> 2.35
of:
from math import floor, ceil
def roundDown(n, d=8):
d = int('1' + ('0' * d))
return floor(n * d) / d
def roundUp(n, d=8):
d = int('1' + ('0' * d))
return ceil(n * d) / d
Antwoord 4, autoriteit 3%
Als u alleen het afgeronde resultaat wilt afdrukken, kunt u de f- strings geïntroduceerd sinds Python 3.6. De syntaxis is hetzelfde als str.format()
‘s syntaxis voor tekenreeksen, behalve dat je een f
voor de letterlijke tekenreeks plaatst, en je de variabelen direct in de tekenreeks plaatst, tussen de accolades.
.2f
geeft afronding op twee decimalen aan:
number = 3.1415926
print(f"The number rounded to two decimal places is {number:.2f}")
Uitvoer:
The number rounded to two decimal places is 3.14
Antwoord 5, autoriteit 2%
U wilt uw antwoord afronden.
round(value,significantDigit)
is de gebruikelijke oplossing om dit te doen, maar dit soms werkt niet zoals men zou verwachten van een wiskundig perspectief wanneer het cijfer dat direct lager is dan (links van) het cijfer waarnaar u afrondt een 5
heeft.
Hier zijn enkele voorbeelden van dit onvoorspelbare gedrag:
>>> round(1.0005,3)
1.0
>>> round(2.0005,3)
2.001
>>> round(3.0005,3)
3.001
>>> round(4.0005,3)
4.0
>>> round(1.005,2)
1.0
>>> round(5.005,2)
5.0
>>> round(6.005,2)
6.0
>>> round(7.005,2)
7.0
>>> round(3.005,2)
3.0
>>> round(8.005,2)
8.01
Ervan uitgaande dat het uw bedoeling is om de traditionele afronding voor statistieken in de wetenschappen te doen, is dit een handige wrapper om de functie round
te laten werken zoals verwacht, waarbij u extra dingen moet import
zoals Decimal
.
>>> round(0.075,2)
0.07
>>> round(0.075+10**(-2*6),2)
0.08
Aha! Dus op basis hiervan kunnen we een functie maken…
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1), digits)
Dit voegt in feite een heel kleine waarde toe aan de tekenreeks om deze te dwingen correct af te ronden in de onvoorspelbare gevallen waar het normaal gesproken niet gebeurt met de functie round
wanneer u dit verwacht. Een handige waarde om toe te voegen is 1e-X
waarbij X
de lengte is van de cijferreeks die u probeert te gebruiken round
op plus 1
.
De benadering van het gebruik van 10**(-len(val)-1)
was opzettelijk, aangezien dit het grootste kleine getal is dat u kunt toevoegen om de verschuiving te forceren, terwijl u er tegelijkertijd voor zorgt dat de waarde die u add verandert nooit de afronding, zelfs niet als de decimale .
ontbreekt. Ik zou gewoon 10**(-len(val))
kunnen gebruiken met een voorwaarde if (val>1)
om 1
meer af te trekken.. maar het is eenvoudiger om altijd de 1
af te trekken, omdat dat niet veel zal veranderen aan het bereik van decimale getallen dat deze tijdelijke oplossing goed aankan. Deze benadering zal mislukken als uw waarden de limieten van het type bereiken, dit zal mislukken, maar voor bijna het hele bereik van geldige decimale waarden zou het moeten werken.
Dus de voltooide code ziet er ongeveer zo uit:
def main():
printC(formeln(typeHere()))
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1))
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(roundTraditional(answer,2))
print "\nYour Celsius value is " + answer + " C.\n"
main()
…moet u de resultaten geven die u verwacht.
Je kunt hiervoor ook de bibliotheek decimaal gebruiken, maar de wrapper Ik stel voor is eenvoudiger en kan in sommige gevallen de voorkeur hebben.
Bewerken: bedankt Blckknght voor het aangeven dat de 5
randgeval komt alleen voor bij bepaalde waarden hier.
Antwoord 6, autoriteit 2%
float(str(round(answer, 2)))
float(str(round(0.0556781255, 2)))
Antwoord 7, autoriteit 2%
Als u een probleem met drijvende komma moet vermijden bij het afronden van getallen voor de boekhouding, kunt u numpy round gebruiken.
Je moet numpy installeren:
pip install numpy
en de code :
import numpy as np
print(round(2.675, 2))
print(float(np.round(2.675, 2)))
afdrukken
2.67
2.68
U moet dat gebruiken als u geld beheert met juridische afronding.
Antwoord 8
U kunt de operator round gebruiken voor maximaal 2 decimalen
num = round(343.5544, 2)
print(num) // output is 343.55
Antwoord 9
U kunt de ronde-functie gebruiken.
round(80.23456, 3)
geeft u een antwoord van 80.234
Gebruik in jouw geval
answer = str(round(answer, 2))
Antwoord 10
Gebruik gewoon de opmaak met %.2f, zodat u naar beneden kunt afronden op 2 decimalen.
def printC(answer):
print "\nYour Celsius value is %.2f C.\n" % answer
Antwoord 11
U kunt de tekenreeksopmaakoperator van python “%” gebruiken.
“%.2f” betekent 2 cijfers achter de komma.
def typeHere():
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(Fahrenheit):
Celsius = (Fahrenheit - 32.0) * 5.0/9.0
return Celsius
def printC(answer):
print "\nYour Celsius value is %.2f C.\n" % answer
def main():
printC(formeln(typeHere()))
main()
http://docs.python.org/2/library/ stdtypes.html#string-formatting
Antwoord 12
Als je niet alleen het resultaat wilt afronden, maar ook wiskundige bewerkingen met het ronde resultaat wilt doen, dan kun je decimal.Decimal
https://docs.python.org/2/library/decimal.html
from decimal import Decimal, ROUND_DOWN
Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)
Decimal('7.32')
Antwoord 13
Hier is een voorbeeld dat ik heb gebruikt:
def volume(self):
return round(pi * self.radius ** 2 * self.height, 2)
def surface_area(self):
return round((2 * pi * self.radius * self.height) + (2 * pi * self.radius ** 2), 2)
Antwoord 14
Ik weet niet zeker waarom, maar ‘{:0.2f}’.format(0.5357706) geeft me ‘0.54’.
De enige oplossing die voor mij werkt (python 3.6) is de volgende:
def ceil_floor(x):
import math
return math.ceil(x) if x < 0 else math.floor(x)
def round_n_digits(x, n):
import math
return ceil_floor(x * math.pow(10, n)) / math.pow(10, n)
round_n_digits(-0.5357706, 2) -> -0.53
round_n_digits(0.5357706, 2) -> 0.53
Antwoord 15
Omdat u uw antwoord in decimale getallen wilt hebben, hoeft u uw variabele antwoord niet naar str in de functie printC() te typen.
en gebruik dan printf-style String Formatting
Antwoord 16
round(12.3956 - 0.005, 2) # minus 0.005, then round.
Het antwoord komt van: https://stackoverflow.com/a/29651462/8025086
Antwoord 17
Om verrassende waarde van round() te voorkomen, is dit mijn aanpak:
Round = lambda x, n: eval('"%.'+str(int(n))+'f" % '+repr(int(x)+round(float('.'+str(float(x)).split('.')[1]),n)))
print(Round(2, 2)) # 2.00
print(Round(2.675, 2)) # 2.68