我希望将一些小数字转换为简单易读的输出。这是我的方法,但我想知道是否有更简单的东西。
x = 8.54768039530728989343156856E-58
y = str(x)
print "{0}.e{1}".format(y.split(".")[0], y.split("e")[1])
8.e-58
答案 0 :(得分:4)
这让你非常接近,你是否需要8.e-58
或者你只是想把它缩短成可读的东西?
>>> x = 8.54768039530728989343156856E-58
>>> print "{0:.1e}".format(x)
8.5e-58
替代方案:
>>> print "{0:.0e}".format(x)
9e-58
请注意,在Python 2.7或3.1+上,您可以省略指示位置的第一个零,因此它类似于"{:.1e}".format(x)
答案 1 :(得分:3)
>>> x = 8.54768039530728989343156856E-58
>>> "{:.1e}".format(x)
'8.5e-58'
答案 2 :(得分:1)
另一种方法,如果您想要在不进行字符串操作的情况下提取指数。
def frexp_10(decimal):
logdecimal = math.log10(decimal)
return 10 ** (logdecimal - int(logdecimal)), int(logdecimal)
>>> frexp_10(x)
(0.85476803953073244, -57)
您希望格式化......
答案 3 :(得分:0)
有两个答案:一个用于使用数字,另一个用于简单显示。
对于实际数字:
>>> round(3.1415,2)
3.14
>>> round(1.2345678e-10, 12)
1.23e-10
内置的 round()函数会将数字四舍五入到任意数量的小数位。您可以使用它来截断读数中无关紧要的数字。
显示时,您使用的显示器版本很重要。在Python 2.x中,在3.x中弃用,您可以使用'e'格式化程序。
>>> print "%6.2e" % 1.2345678e-10
1.23e-10
或在3.x中,使用:
>>> print("{:12.2e}".format(3.1415))
3.14e+00
>>> print("{:12.2e}".format(1.23456789e-10))
1.23e-10
或者,如果你喜欢零:
>>> print("{:18.14f}".format(1.23456789e-10))
0.00000000012346