Я не уверен, что именно вы хотите, но я предполагаю, что вы просто хотите округлить числа, которые у вас есть, до ближайшего целого числа? Если это так, вы можете использовать встроенную функцию round
:
>>> int(round(1.5))
2
Вот помощь:
>>> 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.
Если вы хотите округлить, вы можете использовать floor
с math
. Я думаю, что вы на самом деле хотите использовать это после взятия логарифма, а не просто приведение к int, поскольку int (-0,5) равно 0, а не -1, как вы хотите. Вот модифицированная версия вашей программы, которая, я думаю, делает то, что вы хотите:
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)
Это дает следующий вывод:
(12 +- 1) x 10^1
(4234 +- 2) x 10^0
(23 +- 3) x 10^-3
Это очень близко к тому, что вы хотите. Единственная разница в том, что text x 10^0
не должен быть напечатан, но я уверен, что вы можете найти решение для этого. :)