10** - 6 vs 0.000001 - 只是一个表示或?

Ric*_*nop 3 python math

在Python中,当我将10增加到负六次幂时:

>>> 10**-6
1e-06
Run Code Online (Sandbox Code Playgroud)

它将显示1e-06.

在翻译中显示10** - 6和0.000001之间是否存在显着差异?或者只是表示/格式化差异.

Mar*_*ers 5

要测试两个浮点值是否完全相等,只需使用==:

>>> 0.000001 == 10**-6
True
Run Code Online (Sandbox Code Playgroud)

您可能会将表示混淆.当在解释器中回显时,Python 使用函数格式化a ,并通过使用符号格式化来表示值; 当指数变得足够大时,这种表示法切换到使用科学表示(格式化).实际上是一样的.floatrepr()gerepr()format(value, '.16g')

您可以手动格式化数字:

>>> format(10**-6, '.53f')
'0.00000099999999999999995474811182588625868561393872369'
>>> format(0.000001, '.53f')
'0.00000099999999999999995474811182588625868561393872369'
Run Code Online (Sandbox Code Playgroud)

其中.53f格式化最多53个十进制数的值,一个基于浮点值可以编码的限制的半任意数.

事实上,两个值完全相同.这不是一个给定的; 浮点数计算很容易引入小错误,因为浮点数是二进制分数的近似值.

  • @RichardKnop:随着你的问题改变了,我也得到了-1; 我稍微更新了我的问题,以更好地解决您的新版本. (2认同)