簡體   English   中英

為什么 Node.js 會自動舍入我的浮點數?

[英]Why is Node.js automatically rounding my floating point?

我正在嘗試編寫一個 function ,它將使用此處的答案作為參考來獲取浮點文字中小數點后的小數位數。

盡管在瀏覽器控制台中嘗試這似乎工作正常,但在 Node.js 環境中運行測試用例時,精度僅被截斷至 14 位。

let data = 123.834756380650877834678
console.log(data) // 123.83475638065088

function 返回 14 作為答案。

為什么在 rest 發生舍入? 這是默認行為嗎?

JavaScript(可能是 Node.js)中使用的浮點格式是 IEEE-754 binary64。 源代碼中使用123.834756380650877834678時,將其轉換為最接近的可表示值,即 123.834756380650873097692965529859066009521484375。

將其轉換為具有默認格式的字符串時, JavaScript 使用足夠的數字來唯一區分 value 對於 123.834756380650873097692965529859066009521484375,這應該產生“123.83475638065087”。 如果您收到“123.83475638065088”,最后一位不同,那么您使用的軟件不符合 JavaScript 規范 (ECMAScript)。

在任何情況下,binary64 格式都沒有足夠的精度來保留原始數字“123.834756380650877834678”在小數點后有 21 位的信息。

您鏈接到的代碼也不會也無法計算原始數字中的位數。 它計算唯一區分轉換為 binary64 后表示的值所需的位數。 對於足夠短的數字,小數點后沒有尾隨零,這與原始數字中小數點后的位數相同。 對於其他人來說,可能不是。

這是 JavaScript 的默認行為。我認為它在 node.js 中會相同。

在 JS 中的最大小數位數是 17。

有關更多詳細信息,請查看此處

暫無
暫無

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

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