我在科学记数法中有数字(因此,作为字符串),例如:
8.99284722486562e-02
但我想将它们转换为:
0.08992847
是否有任何内置功能或其他任何方式?
答案 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个或更多零,则为科学值)