簡體   English   中英

從 0.0007 中提取有效數字

[英]Extract significant digit from 0.0007

我想從XX=0.0007提取 7 的有效數字

代碼如下

XX=0.0007
enX1=XX//10**np.floor(np.log10(XX));

但是XX變成了6而不是7 誰能幫我?

從某種意義上說,您很幸運從值0.0007 事實證明,該值是無法以浮點格式精確表示的(許多!)十進制值之一。

浮點數通常以常見的IEEE-754 格式存儲為 2 的冪。就像整數(例如 175)存儲為二進制值遞增的位之和(165 = 128 + 32 + 4 + 1),分數存儲為 1/2 的冪數之和。 這意味着 1/2、1/4 和 1/65536 的值可以精確存儲(及其總和,例如 3/4),但您的0.0007不能 它最接近的值實際上是 0.0000699999999999999992887633748495。 (在這個意義上“最近”,在結尾處增加只是多一個單位將使它比0.0007稍大,所不同的是以往任何時候都那么比這個低一個稍微大一些。)

在您的計算中,您使用雙除斜線// ,它指示 Python 進行整數除法並丟棄小數部分。 因此,雖然中間計算是正確的,並且您得到類似6.99999... ,但它會被截斷,最終得到6

如果您使用單個斜杠,結果將保留其(精確!)小數,但 Python 會將其表示7.0000 ,給出或取幾個零。 默認情況下,Python 僅顯示少量小數。

請注意,這仍然“是”不是確切的值7 計算從一個不精確的數字開始,雖然這里和那里可能會有一些中間舍入,但最終得到精確整數的可能性很小。 同樣,不是針對所有小數,而是針對大量小數。 其他分數值可能會存儲為比您輸入的值略大的值 – 0.0004 ,例如a – 但潛在的精度“問題”也存在於此。 它只是不像你的那樣明顯。

如果您想要最接近的整數結果,請使用單個除斜線進行精確計算,然后round以強制數字為最接近的整數。

a准確地說,大約是 0.000400000000000000019168694409544。 在你的例程之后,Python 會將它顯示4但在內部它仍然比這大一點。

暫無
暫無

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

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