Je reçois beaucoup de décimales dans la sortie de ce code (convertisseur Fahrenheit en Celsius).
Mon code ressemble actuellement à ceci:
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()
Donc ma question est, comment puis-je faire le programme autour de chaque réponse à la 2ème décimale?
Réponses:
Vous pouvez utiliser la
round
fonction, qui prend comme premier argument le nombre et le deuxième argument est la précision après le point décimal.Dans votre cas, ce serait:
la source
round()
for floats peut être surprenant: par exemple,round(2.675, 2)
donne2.67
au lieu de l'attendu2.68
. "round(2.675, 2)
donne2.67
plutôt que2.68
n'a rien à voir avec l'arrondissement bancaire.Utilisation de
str.format()
la syntaxe de pour afficheranswer
avec deux décimales (sans modifier la valeur sous-jacente deanswer
):Où:
:
introduit la spécification de format0
active le remplissage nul sensible aux signes pour les types numériques.2
définit la précision sur2
f
affiche le nombre sous forme de nombre à virgule fixela source
0.5357...
est plus proche0.54
que de0.53
, donc arrondir à0.54
est logique."{:0.2f}".format(1.755)
-> 1,75"{:0.2f}".format(1.7551)
-> 1,76 - Cependant, je m'attendrais tous les deux à 1,76.La plupart des réponses suggèrent
round
ouformat
.round
arrondit parfois, et dans mon cas, j'avais besoin que la valeur de ma variable soit arrondie et pas seulement affichée comme telle.J'ai trouvé la réponse ici: comment arrondir un nombre à virgule flottante jusqu'à une certaine décimale?
ou:
la source
round(2.354, 2) # -> 2.35
10**d
au lieu deint('1' + ('0' * d))
.la source
Vous voulez arrondir votre réponse.
round(value,significantDigit)
est la solution ordinaire pour ce faire, mais cela ne fonctionne parfois pas comme on pourrait s'y attendre d'un point de vue mathématique lorsque le chiffre immédiatement inférieur (à gauche de) le chiffre auquel vous arrondissez a un5
.Voici quelques exemples de ce comportement imprévisible:
En supposant que votre intention est de faire l'arrondi traditionnel pour les statistiques dans les sciences, c'est un wrapper pratique pour faire
round
fonctionner la fonction comme prévu, nécessitantimport
des choses supplémentaires commeDecimal
.Ah! Donc, sur cette base, nous pouvons faire une fonction ...
Fondamentalement, cela ajoute une très petite valeur à la chaîne pour la forcer à arrondir correctement sur les instances imprévisibles où elle n'est pas normalement avec la
round
fonction lorsque vous vous y attendez. Une valeur pratique à ajouter est1e-X
oùX
est la longueur de la chaîne numérique que vous essayez d'utiliserround
sur plus1
.L'approche de l'utilisation a
10**(-len(val)-1)
été délibérée, car c'est le plus grand petit nombre que vous pouvez ajouter pour forcer le décalage, tout en garantissant que la valeur que vous ajoutez ne change jamais l'arrondi même si la décimale.
est manquante. Je pourrais utiliser juste10**(-len(val))
avec une conditionnelleif (val>1)
pour soustraire1
plus ... mais il est plus simple de toujours soustraire1
car cela ne changera pas beaucoup la plage applicable de nombres décimaux que cette solution de contournement peut gérer correctement. Cette approche échouera si vos valeurs atteignent les limites du type, cela échouera, mais pour presque toute la plage de valeurs décimales valides, cela devrait fonctionner.Ainsi, le code fini sera quelque chose comme:
... devrait vous donner les résultats que vous attendez.
Vous pouvez également utiliser la bibliothèque décimale pour accomplir cela, mais le wrapper que je propose est plus simple et peut être préféré dans certains cas.
Edit: Merci Blckknght d' avoir souligné que le
5
cas de frange ne se produit que pour certaines valeurs ici .la source
Utilisez simplement la mise en forme avec% .2f qui vous donne un arrondi à 2 décimales.
la source
Vous pouvez utiliser l'opérateur de formatage de chaîne de python "%". "% .2f" signifie 2 chiffres après la virgule décimale.
http://docs.python.org/2/library/stdtypes.html#string-formatting
la source
Vous pouvez utiliser l' opérateur rond jusqu'à 2 décimales
la source
Vous pouvez utiliser la fonction ronde.
vous donnera une réponse de 80,234
Dans votre cas, utilisez
J'espère que cela t'aides :)
la source
Si vous devez éviter le problème de virgule flottante sur les nombres arrondis pour la comptabilité, vous pouvez utiliser le nombre arrondi.
Vous devez installer numpy:
et le code:
impressions
Vous devriez l'utiliser si vous gérez l'argent avec des arrondis légaux.
la source
Voici un exemple que j'ai utilisé:
la source
Je ne sais pas pourquoi, mais le format '{: 0.2f}' (0.5357706) me donne '0.54'. La seule solution qui fonctionne pour moi (python 3.6) est la suivante:
la source
Comme vous voulez votre réponse en nombre décimal, vous n'avez donc pas besoin de transtyper votre variable de réponse en str dans la fonction printC ().
puis utilisez la mise en forme des chaînes de style printf
la source
La réponse est de: https://stackoverflow.com/a/29651462/8025086
la source