将科学记数法转换为小数

时间:2015-04-24 13:57:35

标签: python string numbers

我在科学记数法中有数字(因此,作为字符串),例如:

8.99284722486562e-02 

但我想将它们转换为:

0.08992847

是否有任何内置功能或其他任何方式?

4 个答案:

答案 0 :(得分:7)

我很确定你可以这样做:

float("8.99284722486562e-02")
# and now with 'rounding'
"{:.8f}".format(float("8.99284722486562e-02"))

答案 1 :(得分:1)

可以使用float将科学记数法转换为浮点数。

在[1]中:postgres=# SELECT key FROM myjson, lateral jsonb_each_text(j) WHERE key LIKE 'this\_%'; ┌───────────────┐ │ key │ ╞═══════════════╡ │ this_that │ │ this_and_that │ └───────────────┘ (2 rows)
出[1]:0.0899284722486562

可以使用float舍入format,然后可以在字符串上使用float来返回最终的舍入浮点数。

在[2]中:float("8.99284722486562e-02")
出[2]:0.08992847

答案 2 :(得分:0)

您可能知道浮点数存在精度问题。例如,评估:

>>> (0.1 + 0.1 + 0.1) == 0.3
False

相反,您可能希望使用Decimal类。在python解释器:

>>> import decimal
>>> tmp = decimal.Decimal('8.99284722486562e-02')
Decimal('0.0899284722486562')
>>> decimal.getcontext().prec = 7
>>> decimal.getcontext().create_decimal(tmp)
Decimal('0.08992847')

答案 3 :(得分:0)

我之所以这样回答,是因为投票最多的人提供了错误的信息,因此我可以解释自己的进步。

TL; DR:使用("%.17f" % n).rstrip('0').rstrip('.')


如果开头有5个或更多零,默认情况下Python格式采用科学计数法。
0.00001 / 1e-05格式转换为"1e-05"
0.0001 / 1e-04格式转换为"0.0001"

因此,8.99284722486562e-02当然已经格式化为"0.0899284722486562"
一个更好的例子是8.99284722486562e-05。 (0.00008992847224866

我们可以轻松地使用"%f"格式将其格式化为原始小数位,默认情况下与"%.6f"相同。
"%f" % 8.99284722486562e-05产生'0.000090'
"%f" % 0.01产生'0.010000'


默认情况下,浮点型显示最多17个小数位。
0.1234567898765432123-(19 dp输入)
0.12345678987654321-(17 dp输出)

因此,如果我们做"%.17f" % 8.99284722486562e-02,我们将得到'0.08992847224865620'。 (请注意额外的0)
但是,如果我们这样做了"%.17f" % 0.0001,我们肯定不会想要'0.00010000000000000'

因此,我们可以删除尾随零:("%.17f" % n).rstrip('0').rstrip('.')
(请注意,如果数字没有小数,我们也会去除小数点)


还有%f的对应对象:
%f显示标准符号
%e显示科学计数法
%g显示默认值(如果为5个或更多零,则为科学值)