“舍入”python中的负指数

时间:2012-05-17 23:19:18

标签: python formatting floating-point

我希望将一些小数字转换为简单易读的输出。这是我的方法,但我想知道是否有更简单的东西。

x = 8.54768039530728989343156856E-58
y = str(x)
print "{0}.e{1}".format(y.split(".")[0], y.split("e")[1])
8.e-58

4 个答案:

答案 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