回覆列表
  • 1 # 網路圈

    對於開發者而言,或多或少都聽前輩們提及過:不要對浮點數進行比較!其實不管是什麼程式語言,只要涉及到浮點數的加減乘除運算,其結果都會偏離預期!這一點應該作為常識銘記於心。

    浮點數存在精度丟失現象

    不管是單精度浮點數還是雙精度浮點數,它們都無法精確表示數值。任何資料在計算機中都是以二進位制儲存的,二進位制浮點數並不能精確表示類似0.5這樣的小數,通俗的說就是:小數的二進位制並不一定是精確的(比如說十進位制不能精確表示1/3,同理二進位制也不能精確表示1/3)。

    一個小數要進入計算機中要經過幾個步聚:

    Step1:轉換為二進位制

    Step2:用二進位制科學計算法表示

    Step3:表示成IEEE 754形式(幾乎所有程式語言的浮點數都是採用IEEE標準的)

    在第一步和第三步時,都會存在丟失精度的可能,然後再將兩個浮點數進行數學運算,結果會更加偏離預期。

    浮點數精度丟失解決方案

    特別是在金融類專案中,不可避免會出現一些小數,此時我們絕對要禁止使用浮點數來表示這些小數,而應該改為Decimal庫來儲存小數。

  • 2 # zhangyiant

    不單單是.net,任何語言只要用浮點數都會有這樣的問題,可以研究一下浮點數在計算機裡面的儲存方式,就能明白這麼玩一定會在某些情況丟失精度。所以如果你的運算是不能丟失精度的,比如說貨款價格,你就要想想該用什麼資料了,如果用浮點,精度時候夠。這就是為什麼程式設計裡面資料結構很重要的原因。

  • 中秋節和大豐收的關聯?
  • 怎樣才能去掉黑眼圈和使面板變白呢?