【问题标题】:Preventing Scientific Notation in Arrays防止数组中的科学记数法
【发布时间】:2021-08-09 09:50:49
【问题描述】:

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

output=f"{num:8f}"

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

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

【问题讨论】:

标签: python arrays syntax output


【解决方案1】:

这是你的回答者吗:

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

【讨论】:

  • 我不希望在 1 之后出现尾随零,因为这会与代码混淆。我只希望 0.000001000 为 0.00001,这就是为什么我正在寻找一个选项,如果这有意义,则不需要定义要浮动到的小数位数
【解决方案2】:

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

1.1 - 1

有输出

 0.10000000000000009

“小数位数”不是浮点数所具有的属性,因为它们在内部存储和处理的方式。引用上述链接的一个答案

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

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

【讨论】:

    猜你喜欢
    • 2022-10-10
    • 2016-02-21
    • 2022-01-19
    相关资源
    最近更新 更多