簡體   English   中英

從 JSON API 收到的號碼的轉換安全

[英]Conversion safety for numbers received from JSON API

我有一個后端可以發送小數點前最多 19 位和小數點后最多 6 位的數字。 后端准確並正確地將這些數字轉換為 JSON 之類的

{
  myNumber: 9999999999999999999.123456
}

在前端,我使用 JavaScript 和標准獲取 API response.json()

  1. 默認情況下myNumber通過response.json()轉換為 JavaScript number類型。 在此轉換過程中會不會有任何精度損失?
  2. 稍后我可能會將number類型轉換回字符串。 在此轉換過程中會不會有任何精度損失?

我需要了解哪些數字可以安全地從 (a) JSON 表示形式轉換為 (b) JavaScript 數字類型和 (c) 轉換回字符串。 (a) 和 (c) 在哪些范圍內是相同的,我什么時候會遇到問題?

I hope I abstracted that enough away, but in case anyone is interested: The backend is C# Web API with SQL Server which uses DECIMAL(19,6).

基本上,使用字符串而不是 JSON 數字。 RFC 8259指出:

該規范允許實現對接受的數字的范圍和精度設置限制。 由於實現 IEEE 754 二進制 64(雙精度)數字 [IEEE754] 的軟件普遍可用並被廣泛使用,因此可以通過預期不超過這些提供的精度或范圍的實現來實現良好的互操作性,從某種意義上說,實現將接近 JSON 數字預期的精度。 JSON 數字,例如 1E400 或 3.141592653589793238462643383279 可能表明潛在的互操作性問題,因為它表明創建它的軟件期望接收軟件具有比廣泛可用的更大的數值幅度和精度功能。

您處理的數字比 IEEE-754 雙精度保留的數字多得多。

如果您在 JSON 中使用這樣的字符串:

{
    "myNumber": "9999999999999999999.123456"
}

...然后您可以自己處理與任何高精度/任意精度類型的轉換; 它完全在你的控制之中。

暫無
暫無

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

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