簡體   English   中英

浮點數——沒有算術運算和精度錯誤

[英]Floating point numbers - no arithmetic operations and precision errors

如果我不對浮點數執行任何算術運算,我是否會遇到任何浮點數精度錯誤? 我在我的程序中對數字所做的唯一操作僅限於以下內容:

  1. 從 web 服務獲取數字作為字符串並使用parseFloat()將它們轉換為浮點數
  2. 使用<= < == > >=比較結果浮點數

例子:

 const input = ['1000.69', '1001.04' /*, ... */] const x = parseFloat(input[0]) const y = parseFloat(input[1]) console.log(x < y) console.log(x > y) console.log(x == y)

至於parseFloat()實現,我使用的是最新的 Node.js。

浮點數的來源是以美元為單位的字符串價格,始終保留兩位小數。

只要你的花車來源可靠,你的支票就是安全的,是的。 解析后我仍然會將它們四舍五入為可接受的十進制數,只是為了 100% 安全。

正如 MDN 文檔在其中一個示例中所示

// these all return 3.14
parseFloat(3.14);
parseFloat('3.14');
parseFloat('  3.14  ');
parseFloat('314e-2');
parseFloat('0.0314E+2');
parseFloat('3.14some non-digit characters');
parseFloat({ toString: function() { return "3.14" } });

//and of course
parseFloat('3.140000000') === 3.14

parseFloat操作將字符串轉換為其數值 規范說:

在本規范中,短語“x 的 Number value”(其中 x 表示精確的實數數學量(甚至可能是無理數,例如 π))表示按以下方式選擇的 Number 值。 考慮 Number 類型的所有有限值的集合,刪除 -0 並添加兩個在 Number 類型中不可表示的附加值,即 2ℝ1024ℝ(即 +1ℝ × 2ℝ53ℝ × 2ℝ971ℝ)和 -2ℝ1024ℝ(這是 -1ℝ × 2ℝ53ℝ × 2ℝ971ℝ)。 選擇該集合中值最接近 x 的成員。

這看起來好像兩個相同的字符串總是被轉換為相同的最接近的數字。 除 NaN 外,兩個相同的數字是相等的。

6.1.6.1.13 數字::等於 ( x, y )

如果 x 是 NaN,則返回 false。

如果 y 為 NaN,則返回 false。

如果 x 與 y的 Number 值相同,則返回 true。

如果 x 為 +0 且 y 為 -0,則返回 true。

如果 x 為 -0 且 y 為 +0,則返回 true。

返回假。

強調我的

暫無
暫無

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

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