我有一些数字:
1.8816764231589208e-06 <type 'float'>
我如何转换为
0.00000018816764231589208
保留所有精度
答案 0 :(得分:1)
这不是一个简单的问题,因为二进制浮点数不能总是精确地表示小数分数,而你选择的数字就是这样。
因此,您需要知道所需的精度数字。在您的确切情况下,看看当我尝试使用各种格式打印时会发生什么。
link
正如您将要观察到的,Python很乐意提供许多精度数字,但实际上后者是虚假的:标准Python浮点数以64位存储,但其中只有52个用于表示有效数字,这意味着你最多可以获得16位有效数字。
这里真正的教训是Python无法将1.8816764231589208e-06完全存储为浮点数。这不是语言限制,而是浮点实现的代表性限制。
但是,上面显示的格式可以帮助您解决问题。
答案 1 :(得分:0)
Rory Daulton在评论中表示,您提供的价值未妥善存储。所以你的浮动1.8816764231589208e-06 <type 'float'>
可以用这个例子来解释:
>>> from decimal import Decimal
>>> a = 1.8816764231589208e-06
>>> g = 0.0000018816764231589208 # g == a
>>> Decimal(a) # Creates a Decimal object with the passed float
Decimal('0.000001881676423158920791458225373060653140555587015114724636077880859375')
>>> Decimal('0.0000018816764231589208') # Exact value stored using str
Decimal('0.0000018816764231589208')
>>> Decimal(a) == Decimal('0.0000018816764231589208')
False # See the problem here? Your float did not
# represent the number you "saw"
>>> Decimal(a).__float__()
1.8816764231589208e-06
>>> Decimal(a).__float__() == a
True
如果需要精确的小数,请使用Decimal或其他类来表示数字,而不是二进制表示,例如float。 0.0000018816764231589208
类型float
实际上是Decimal()
显示的数字。