Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 大浮点数的Intl格式_Javascript_Ecmascript Intl - Fatal编程技术网

Javascript 大浮点数的Intl格式

Javascript 大浮点数的Intl格式,javascript,ecmascript-intl,Javascript,Ecmascript Intl,我正试图更好地理解为什么在JavaScript及其本地化工具(如ECMA-402/Intl)中处理可能精度较高的大数字时会出现不一致的情况。我假设这与使用浮点数有关,但我想了解限制在哪里和/或如何避免这些陷阱 例如,使用Intl.NumberFormat: console.log(new Intl.NumberFormat('en-US', { minimumFractionDigits: 3, maximumFractionDigits: 3 }).format(9999999999990.0

我正试图更好地理解为什么在JavaScript及其本地化工具(如ECMA-402/Intl)中处理可能精度较高的大数字时会出现不一致的情况。我假设这与使用浮点数有关,但我想了解限制在哪里和/或如何避免这些陷阱

例如,使用Intl.NumberFormat:

console.log(new Intl.NumberFormat('en-US', { minimumFractionDigits: 3, maximumFractionDigits: 3 }).format(9999999999990.001)); // logs 9,999,999,999,990.000

let test1 = 9999999999990.001
console.log(test1);  // logs 9999999999990.002
我如何才能找出这些数字在哪里开始变得不一致?有什么限制吗?随着十进制精度的提高,该限制是否会改变,例如:

let test2 = 9999999999990.0004;
console.log(test2) // logs 9999999999990
有什么限制吗?随着十进制精度的提高,这个极限会改变吗

对,对。JavaScript中的浮点数本身存储在64位空间中,这意味着它们所能表示的精度有限。有关更多信息,请参阅

我如何才能找出这些数字在哪里开始变得不一致

将数值文本以字符串的形式传递给函数,并检查该字符串在强制转换为数字并返回时是否返回正确的文本:

功能保险箱号码{ 如果字符串+s!==s 抛出新错误“不安全号码!” 返回+s } let safe=safeNumber“99999999999” 控制台.日志安全 let unsafe=安全编号“9999999999 0.001”
logunsafeThis很好,信息丰富,但我真正想做的是提前了解这些不安全的数字在哪里。如果我使用Intl格式设置货币格式,我需要知道,在哪一点上,我的值不会反映它们的真实值。换句话说,小数点前64位的空间限制和小数点后64位的空间限制。。。。除非我理解错了!15位有效数字。看见