相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

如何在javascript中格式化浮点数?

在JavaScript中,当从float转换为字符串时,如何在小数点后只获得2位数?例如,0.34而不是0.3445434.

javascript floating-point

420
推荐指数
7
解决办法
42万
查看次数

如何避免JavaScript中大数字的科学记数法?

当数字变大时,JavaScript会将大型INT转换为科学记数法.我怎样才能防止这种情况发生?

javascript

161
推荐指数
9
解决办法
11万
查看次数

如何使用js比较软件版本号?(唯一号码)

这是软件版本号:

"1.0", "1.0.1", "2.0", "2.0.0.1", "2.0.1"
Run Code Online (Sandbox Code Playgroud)

我该如何比较?假设正确的顺序是:

"1.0", "1.0.1", "2.0", "2.0.0.1", "2.0.1"
Run Code Online (Sandbox Code Playgroud)

这个想法很简单......:读取第一个数字,然后读取第二个数字,然后读取第三个数字....但是我无法将版本号转换为浮点数....你也可以看到版本号就像这个:

"1.0.0.0", "1.0.1.0", "2.0.0.0", "2.0.0.1", "2.0.1.0"
Run Code Online (Sandbox Code Playgroud)

这更清楚地看到背后的想法是什么......但是,如何将其转换为计算机程序?有没有人知道如何排序这个?谢谢.

javascript sorting

145
推荐指数
18
解决办法
7万
查看次数

为什么Math.pow()(有时)在JavaScript中不等于**?

我刚刚发现ECMAScript 7功能a**b作为Math.pow(a,b)(MDN参考)的替代方案,并且在该帖子中遇到了一个讨论,其中他们显然表现不同.我在Chrome 55中测试了它,可以确认结果有所不同.

Math.pow(99,99) 回报 3.697296376497263e+197

99**99 回报 3.697296376497268e+197

因此记录差异会Math.pow(99,99) - 99**99导致-5.311379928167671e+182.

到目前为止可以说,它只是另一种实现,但将它包装在一个函数中的行为又有所不同:

function diff(x) {
  return Math.pow(x,x) - x**x;
}
Run Code Online (Sandbox Code Playgroud)

调用diff(99)返回0.

为什么会这样?

正如xszaboj指出的那样,这可以缩小到这个问题:

var x = 99;
x**x - 99**99; // Returns -5.311379928167671e+182
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome v8 ecmascript-7

114
推荐指数
1
解决办法
7766
查看次数

在Javascript中处理浮点精度

y在javascript中有大量的数值.我想通过将它们舍入到最接近的倍数来对它们进行分组x,并将结果转换为字符串.

如何绕过恼人的浮点精度?

例如:

0.2 + 0.4 = 0.6000000000000001
Run Code Online (Sandbox Code Playgroud)

我尝试了两件事:

>>> y = 1.23456789 
>>> x = 0.2 
>>> parseInt(Math.round(Math.floor(y/x))) * x; 
1.2000000000000002
Run Code Online (Sandbox Code Playgroud)

和:

>>> y = 1.23456789 
>>> x = 0.2 
>>> y - (y % x)
1.2000000000000002
Run Code Online (Sandbox Code Playgroud)

javascript floating-point double floating-accuracy numerical-methods

83
推荐指数
3
解决办法
16万
查看次数

在javascript中截断(不舍入)十进制数

我试图将十进制数截断为小数位.像这样的东西:

5.467   -> 5.46  
985.943 -> 985.94
Run Code Online (Sandbox Code Playgroud)

toFixed(2)做正确的事情,但它完成了价值.我不需要四舍五入的值.希望这在javascript中是可能的.

javascript floating-point floating-accuracy

76
推荐指数
11
解决办法
13万
查看次数

如何在Javascript中获取浮点数的小数位?

我想要的是与Number.prototype.toPrecision()几乎相反,这意味着当我有数字时,它有多少小数?例如

(12.3456).getDecimals() // 4
Run Code Online (Sandbox Code Playgroud)

javascript math floating-point

33
推荐指数
2
解决办法
3万
查看次数

为什么模数运算符在javascript中返回小数?

为什么49.90 % 0.10在JavaScript中返回0.09999999999999581?我预计它会是0.

javascript floating-point modulus

30
推荐指数
3
解决办法
3万
查看次数

为什么 Number("x") == BigInt("x") ... 只是有时?

我认为 JavaScript 的松散相等运算符很好,让我可以将 Numbers 与 BigInts 进行比较:

42 == 42n  // true!
Run Code Online (Sandbox Code Playgroud)

所以我尝试了一个大于Number.MAX_SAFE_INTEGER. 我认为由于数字会自动四舍五入,因此我可能还必须四舍五入 BigInt 才能将它们视为相等:

9999999999999999 == 10000000000000000   // true - rounded to float64

9999999999999999  == 9999999999999999n  // false - makes sense!
10000000000000000 == 9999999999999999n  // false - makes sense!
9999999999999999  == 10000000000000000n // true  - makes sense!
Run Code Online (Sandbox Code Playgroud)

太好了,有道理——所以我尝试了另一个四舍五入的大数字:

18446744073709551616 == 18446744073709552000   // true - rounded to float64

18446744073709551616 == 18446744073709551616n  // true?!
18446744073709552000 == 18446744073709551616n  // true?!
18446744073709551616 == 18446744073709552000n  // false?!
Run Code Online (Sandbox Code Playgroud)

我在 Chrome、Safari …

javascript

28
推荐指数
1
解决办法
1543
查看次数