将科学记数法转换为人类可读的浮点数

时间:2014-07-30 20:22:26

标签: python

我如何以编程方式使用这样的浮点数:

1.87491348956e-28

并将其转换为float(可能是字符串),如下所示:

0.000000000000000000000000000187491348956

(我认为这是正确的零数)

3 个答案:

答案 0 :(得分:5)

a=1.87491348956e-28
base,expo = str(a).split('e')
print '%%1.%df'%(len(base)-2+abs(int(expo)))%a

编辑:我忘了删除一些格式化部分。最新版本稍短。

它是如何运作的?

您可以将格式字符串称为递归格式字符串。在第一步骤中,仅内部部分,即%d被解释为格式信息,并由浮点数的计算长度代替。让我们调用长度为X.因此,在第一次格式化之后,剩余的格式字符串读取%1.Xf并用于实际格式化数字。请注意,在第一步之后,%%被单个%替换。

修改

Rob_sigma添加了一个更简单的解决方案评论:

a=1.87491348956e-28
base,expo = str(a).split('e')
print '%.*f'%(len(base)-2+abs(int(expo)),a)

我必须承认我之前从未见过这种语法。

答案 1 :(得分:1)

计算小数点后的位数,并添加+指数以获得输出精度:

'%.39f' % 1.87491348956e-28

答案 2 :(得分:0)

根据其他答案,我能够创造出我想要的东西:

f = 1.23456789e-28
d = abs(int(str(f).split('e')[1]))
print format(f, '.{0}f'.format(d)) + ' %'

不同之处在于上面的函数会自动生成一个人类可读的浮点数,它总是与所需数字一样多。另外,我可以做一个" d + = 10"或类似添加其他有效数字。

这里有一些示例输出,看看我的意思:

0.0000000000000000000000000000003 %
0.0000000000000000000000000000006 %
0.0000000000000000000000000000009 %
0.000000000000000000000000000001 %
0.000000000000000000000000000001 %
0.000000000000000000000000000002 %
0.000000000000000000000000000002 %
0.000000000000000000000000000002 %
0.000000000000000000000000000003 %
0.000000000000000000000000000003 %
0.000000000000000000000000000003 %
0.000000000000000000000000000004 %
0.000000000000000000000000000004 %
0.000000000000000000000000000004 %
0.000000000000000000000000000004 %
0.000000000000000000000000000005 %
0.000000000000000000000000000005 %
0.000000000000000000000000000005 %
0.000000000000000000000000000006 %
0.000000000000000000000000000006 %
0.000000000000000000000000000006 %
0.000000000000000000000000000006 %
0.000000000000000000000000000007 %
0.000000000000000000000000000007 %
0.000000000000000000000000000007 %
0.000000000000000000000000000008 %
0.000000000000000000000000000008 %
0.000000000000000000000000000008 %
0.000000000000000000000000000009 %
0.000000000000000000000000000009 %
0.000000000000000000000000000009 %
0.000000000000000000000000000009 %
0.000000000000000000000000000010 %
0.000000000000000000000000000010 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000001 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %
0.00000000000000000000000000002 %

看看数字如何变大,生成的浮点数会变短以匹配。