使用设定的有效数字位数(非科学数字)打印浮点数

时间:2018-08-18 11:27:58

标签: python format

我要打印一组带有有效数字(即非零)的浮点数,但要避免使用科学计数法(e)。

例如,数字0.000000002343245345应打印为0.000000002343(而不是2.343e-09

我知道如何用e符号定义有效位数:

>>>print('{:.3e}'.format(0.000000002343245345))
2.343e-09

以及如何在不使用电子符号的情况下打印设置的小数位数:

>>>print('{:.12f}'.format(0.000000002343245345))
0.000000002343

但不是如何结合两者。 有什么简单的方法吗?

2 个答案:

答案 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.10.010.001等)相差一倍。我的代码似乎可以很好地处理这些值,但这不能保证。

此外,对于xn的某些组合也没有合理的答案。例如,您期望x = 200000n = 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