3

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

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

4 回答 4

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)

于 2012-05-17T23:26:39.897 回答
3

像这样?

>>> x = 8.54768039530728989343156856E-58
>>> "{:.1e}".format(x)
'8.5e-58'
于 2012-05-17T23:27:40.960 回答
1

另一种方法是,如果您想在不进行字符串操作的情况下提取指数。

def frexp_10(decimal):
   logdecimal = math.log10(decimal)
   return 10 ** (logdecimal - int(logdecimal)), int(logdecimal)

>>> frexp_10(x)
(0.85476803953073244, -57)

格式如你所愿...

于 2012-05-17T23:31:46.693 回答
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
于 2012-05-18T01:42:09.933 回答