[英]Conversion from string to float of numerical values (scientific notation)
我正在使用Python讀取文件並將以字符串形式寫入的數值轉換為float。 我觀察到一個奇怪的轉換:
a="-5.970471694E+02"
b = float(a)
b
>> -597.0471694
bb = np.float64(a)
bb
>> -597.04716940000003
e="-5.970471695E+02"
ee = np.float64(e)
ee
>> -597.0471695
ee-bb
>> -9.9999965641472954e-08
bb
末尾出現術語“ 0000003”的原因是什么? 為什么我對ee
觀察不到同樣的事情。 這真的有問題嗎? 我認為這個問題是由於浮點精度引起的,但是在我開始使用變量之前,結果似乎受到了干擾。
bb
末尾出現術語“ 0000003”的原因是什么? 為什么我對ee
觀察不到同樣的事情。
b
和bb
具有相同的值(嘗試評估b == bb
)。 區別在於解釋器如何表示它們。 默認情況下,numpy浮點數顯示為小數點后8位,而Python浮點數顯示為13個有效數字(包括小數點前的那些)。
這真的有問題嗎?
由於b
和bb
的實際值相同,因此答案幾乎肯定是“否”。 如果顯示差異困擾您,則可以使用np.set_printoptions
來控制numpy浮點數在解釋器中的表示方式。 如果使用IPython,則還可以使用%precision
魔術控制常規Python浮點數的打印方式。
float和float64均使用數字的二進制表示形式。 兩者都必須保存由以10為底的數字到以2為底的數字的轉換所引起的近似值。float使用較少的位,因此誤差較大,當將a
復制到b
時可以看到。 這是因為b
取a
包括舍入誤差而不會丟失信息,並且a
包含該000..03
值。 換句話說,從十進制數轉換為二進制數是舍入錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.