我如何以编程方式使用这样的浮点数:
1.87491348956e-28
并将其转换为float(可能是字符串),如下所示:
0.000000000000000000000000000187491348956
(我认为这是正确的零数)
答案 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 %
看看数字如何变大,生成的浮点数会变短以匹配。