вывести красивое значение с ошибкой - PullRequest
0 голосов
/ 06 февраля 2010

Я хочу отобразить на странице HTML некоторые данные с ошибками, например:

(value, error) -> string
(123, 12) -> (12 +- 1) x 10^1
(4234.3, 2) -> (4234 +- 2)
(0.02312, 0.003) -> (23 +- 3) x 10^-3

Я произвел это:


from math import log10
def format_value_error(value,error):
    E = int(log10(abs(error)))
    val = float(value) / 10**E
    err = float(error) / 10**E
    return "(%f +- %f) x 10^%d" % (val, err, E)

но у меня есть некоторые трудности с округлением. Есть ли библиотеки с такой функциональностью?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2010

Я не уверен, что именно вы хотите, но я предполагаю, что вы просто хотите округлить числа, которые у вас есть, до ближайшего целого числа? Если это так, вы можете использовать встроенную функцию 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 не должен быть напечатан, но я уверен, что вы можете найти решение для этого. :)

0 голосов
/ 06 февраля 2010

Вы можете использовать это в решении Марка, чтобы очистить показатель степени для 10^0

    if E:
        return "(%d +- %d) x 10^%d" % (val, err, E)
    else:
        return "(%d +- %d)" % (val, err)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...