簡體   English   中英

從字符串轉換為數值的浮點數(科學計數法)

[英]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觀察不到同樣的事情。

bbb具有相同的值(嘗試評估b == bb )。 區別在於解釋器如何表示它們。 默認情況下,numpy浮點數顯示為小數點后8位,而Python浮點數顯示為13個有效數字(包括小數點前的那些)。

這真的有問題嗎?

由於bbb的實際值相同,因此答案幾乎肯定是“否”。 如果顯示差異困擾您,則可以使用np.set_printoptions來控制numpy浮點數在解釋器中的表示方式。 如果使用IPython,則還可以使用%precision魔術控制常規Python浮點數的打印方式。

float和float64均使用數字的二進制表示形式。 兩者都必須保存由以10為底的數字到以2為底的數字的轉換所引起的近似值。float使用較少的位,因此誤差較大,當將a復制到b時可以看到。 這是因為ba包括舍入誤差而不會丟失信息,並且a包含該000..03值。 換句話說,從十進制數轉換為二進制數是舍入錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM