Javascript 中的精确浮点数是如何工作的?

How works precision Float of numbers in Javascript?

提问人:Borja 提问时间:3/31/2019 最后编辑:norbitrialBorja 更新时间:3/31/2019 访问量:61

问:

大家好,我正在研究有关天文计算的文件,所以我需要更多的精度。 我对每一行都有很多操作,我想要更精确的结果(逗号后还有十或二十个小数)。javascript

在JavaScript中如果我不声明小数位数(例如使用),逗号后有多少个位置,语言在计算时考虑?.ToFixed(n)

例如:

var a= 1.123456789*3.5; // result 3.9320987615
var b= a/0.321;
var c= b*a;

// c => 48.16635722800571

结果会是这样吗?就像对 javascript 的每个变量在逗号后使用所有小数一样,近似值是多少?

为什么在其他问题中用户建议使用其他库?decimal.js

如果我的问题看起来很愚蠢,我很抱歉,但对我来说很重要。 我希望你能帮助我。

对不起我的英语!

JavaScript 浮点 精度

评论

0赞 Code Maniac 3/31/2019
Number.toPrecision
0赞 Borja 3/31/2019
但是我应该对每个变量、每个数据、每行都使用这种方法吗?还是只是为了结果?

答:

-1赞 MohMul15 3/31/2019 #1

仅仅因为 toFixed() 方法将数字转换为字符串,并保留指定数量的小数。因此,返回的值将是一个字符串而不是一个数字。

2赞 The Unfit donkey 3/31/2019 #2

Javascript 使用 IEEE-754 双精度,这意味着它只能将数字计算到大约 15 位十进制数字的精度,超过被截断的精度。如果你需要更高的精度,你必须使用或其他类似的库。其他问题推荐或其他库是因为它很容易放入您的程序中,并且可以提供您想要的尽可能多的精度。decimal.jsdecimal.js

默认情况下,它未在计算机中实现的原因是,计算机计算到 20 位而不是 15 位数字需要更多的努力,因为计算机只能计算到 15 位十进制数字。如果你想阅读更多关于它的信息,我建议你阅读维基百科上的任意精度算术

评论

0赞 Rudy Velthuis 4/1/2019
换言之:精度约为 15 位的类型是硬件支持的类型。任何更大的事情都无法在可用的硬件支持下完成,因此不仅更困难(必须完全在软件中完成),而且速度也慢得多。