Je ne sais pas exactement ce que vous voulez, mais je suppose que vous voulez simplement arrondir les nombres que vous avez à l'entier le plus proche? Si oui, vous pouvez utiliser la fonction intégrée round
:
>>> int(round(1.5))
2
est ici l'aide:
>>> help(round)
Help on built-in function round in module __builtin__:
round(...)
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
Si vous voulez arrondir vous pouvez utiliser floor
de math
. Je pense que vous voulez vraiment l'utiliser après avoir pris le logarithme, plutôt que de simplement lancer vers int, comme int (-0.5) est 0, pas -1 comme vous voulez. Voici une version modifiée de votre programme que je pense ne ce que vous voulez:
from math import log10, floor
def format_value_error(value,error):
E = int(floor(log10(error)))
val = int(round(float(value)/10**E))
err = int(round(float(error)/10**E))
return "(%d +- %d) x 10^%d" % (val, err, E)
print format_value_error(123, 12)
print format_value_error(4234.3, 2)
print format_value_error(0.02312, 0.003)
Cela donne le résultat suivant:
(12 +- 1) x 10^1
(4234 +- 2) x 10^0
(23 +- 3) x 10^-3
Ceci est très proche de ce que vous voulez. La seule différence est que le text x 10^0
ne devrait pas être imprimé, mais je suis sûr que vous pouvez trouver une solution pour cela. :)
il est plus compliqué. Je connais la fonction round, mais j'ai besoin de calculer les seconds arguments pour arrondir (ndigits) –
@wiso: Est-ce que ma réponse mise à jour vous aide? –
très bien! Merci –