我要打印一组带有有效数字(即非零)的浮点数,但要避免使用科学计数法(e
)。
例如,数字0.000000002343245345
应打印为0.000000002343
(而不是2.343e-09
)
我知道如何用e符号定义有效位数:
>>>print('{:.3e}'.format(0.000000002343245345))
2.343e-09
以及如何在不使用电子符号的情况下打印设置的小数位数:
>>>print('{:.12f}'.format(0.000000002343245345))
0.000000002343
但不是如何结合两者。 有什么简单的方法吗?
答案 0 :(得分:3)
这是一些通常可以执行所需功能的代码。
x = 0.000000002343245345
n = 4
from math import log10, floor
print('{:.{}f}'.format(x, n - floor(log10(x)) - 1))
请注意,由于浮点算术缺乏准确性,因此有时可能会给出错误的答案。例如,floor(log10())
可能与负幂或接近10的负幂(例如,0.1
,0.01
,0.001
等)相差一倍。我的代码似乎可以很好地处理这些值,但这不能保证。
此外,对于x
和n
的某些组合也没有合理的答案。例如,您期望x = 200000
和n = 4
产生什么结果?没有好的答案,我的代码给出了错误
ValueError: Format specifier missing precision
答案 1 :(得分:2)
您必须自己计算位数。对于四个有效数字,这将是
number = 0.000000002343245345
digits = 4 - int(math.ceil(math.log10(number)))
print("{:.{}f}".format(number, digits))
# 0.000000002343