Top 10 測試目標極端值

數值極端

每一個值都是合法的數字或數字字串,而且每一個都會弄壞某種常見的處理方式。

11 個危險值值也在 JSON-LD 裡

值與它會弄壞什麼

1e100超過任何貨幣的量綱。應具名拒絕,不是四捨五入。
90071992547409932^53+1。轉成 IEEE754 double 會靜默變成 …992 結尾。這就是金額用 decimal string 的理由。
0.1 + 0.2浮點加法得 0.30000000000000004。門檻比較用浮點就會在邊界上跳動。
-0負零等於零,字串化後卻不同。當成識別字的一部分就會分裂成兩個。
1e-7小於任何貨幣的最小單位。捨入到 0 之後,「降價 0 元」算不算一次降價?
0.001規格 T24-AC-05 明列的精度。捨入策略必須寫下來並保持一致。
NaN 與 Infinity不是合法 JSON,但常出現在 HTML 文字裡。解析出來要拒絕,不得當成 0。
千分位逗號、不斷行空白 U+00A0直接 parseFloat 會得到 1。
全形數字 U+FF10–U+FF19看起來是數字,Number() 得 NaN。
阿拉伯-印度數字 U+0660–U+0669同上。
前導零 007字串 "007" 轉數字會變成 7;當成批號、序號這類識別字的一部分時,這個轉換本身就是一次資料遺失——"007""07" 不是同一個識別字,但轉成數字後看起來一樣。

平台必須不做的事

不得把任何一個無效或超量綱的值當成一次真實的變動。金額一律 decimal string,不用二進位浮點數。

取值

抓頁面/jsonld/0/observed/ 之下
結構化來源同目錄的 numbers.json