打印漂亮的价值与错误

时间:2010-02-05 21:14:23

标签: python math statistics printing

我想在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 个答案:

答案 0 :(得分:3)

我不确定你想要什么,但我想你只想将你拥有的数字四舍五入到最接近的整数?如果是这样,您可以使用内置函数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,但我相信你可以找到解决方案。 :)

答案 1 :(得分:0)

你可以在Mark的解决方案中使用它来清空10^0

的指数
    if E:
        return "(%d +- %d) x 10^%d" % (val, err, E)
    else:
        return "(%d +- %d)" % (val, err)