2010-02-05 64 views
0

我想在一个HTML页面来显示一些DATAS有错误,例如:打印美的价值与错误

 
(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) 

,但我有一些困难四舍五入。有一些库具有这种功能吗?

回答

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. 

如果你想四舍五入您可以使用floormath。我认为你实际上想在采用对数后使用它,而不是仅仅投射到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

它更复杂。我知道轮回函数,但我需要计算第二个参数round(ndigits) – 2010-02-05 21:22:48

+0

@wiso:我更新的答案是否对您有帮助? – 2010-02-05 21:26:01

+0

非常好!谢谢 – 2010-02-05 21:38:25

0

你可以在Mark的解决方案,以空白指数用这个10^0

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