我想在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)
但我在舍入方面遇到了一些困难。是否有一些具有此功能的库?
答案 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)