![](/img/trans.png)
[英]Can precision of floating point numbers in Javascript be a source of non determinism?
[英]Floating point numbers - no arithmetic operations and precision errors
如果我不對浮點數執行任何算術運算,我是否會遇到任何浮點數精度錯誤? 我在我的程序中對數字所做的唯一操作僅限於以下內容:
parseFloat()
將它們轉換為浮點數<=
<
==
>
>=
比較結果浮點數例子:
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% 安全。
// 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.