防止数组中的科学记数法

Preventing Scientific Notation in Arrays

我正在寻找一种方法来抑制输出不同长度浮点数的数组的科学记数法。我看过的所有指南都向您展示了如何在您已经知道奇异值有多少小数位时使用以下代码抑制奇异值的科学计数法:

output=f"{num:8f}"

然而,在遍历列表时有没有办法做到这一点,其中一些值可能是 0.0000001(小数点后 7 位),有些可能是 0.000001(小数点后 6 位),有些可能是0.00000001(8位小数)等?

我想要的是一个函数,当遍历列表并输出具有大量小数位的值时,它总是只输出浮点数的真实值,而不是它的科学记数法,不管它的小数位数

这是你的答案吗:

import decimal

l = [0.0000001 , 0.000001 , 0.00000001]

for i in l:
    d = decimal.Decimal(str(i))
    print(d.as_tuple())
    
    e = abs(d.as_tuple().exponent)
    print(f'{i:.{e}f}')

输出:

DecimalTuple(sign=0, digits=(1,), exponent=-7)
0.0000001
DecimalTuple(sign=0, digits=(1,), exponent=-6)
0.000001
DecimalTuple(sign=0, digits=(1,), exponent=-8)
0.00000001

来自:Easy way of finding decimal places 有关浮点精度的问题,请参阅 post。 因为例如

1.1 - 1

有输出

 0.10000000000000009

“小数位数”不是 属性 浮点数,因为它们在内部存储和处理的方式。 引自以上答案 link

似乎实现所需“打印效果”的一种可能方法是:

from decimal import Decimal

for i in [5.5624, 6.454257, 0.0000001, 0.00000000000001]:
    e = abs(Decimal(str(i)).as_tuple().exponent)
    print(f'{i:.{e}f}')

输出:

In [21]: for i in [5.5624, 6.454257, 0.0000001, 0.00000000000001]:
    ...:     e = abs(Decimal(str(i)).as_tuple().exponent)
    ...:     print(f'{i:.{e}f}')
    ...: 
    ...: 
    ...: 
    ...: 
    ...: 
5.5624
6.454257
0.0000001
0.00000000000001