我正在做一些计算,我的计算结果给了我NaN。所以我用了下面的东西来转换它,0,这很好
Number((((0-0)/0)*100).toFixed(2)) || 0直到结果是-Infinity和我发现-Infinity是数值。所以,现在我做了如下所示,将-Infinity转换为0
var result = Number((((0-18)/0)*100).toFixed(2)) || 0
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
result=0;
console.log(result)
}
这是解决问题的办法,但是否有更短或更好的办法?
发布于 2019-10-12 16:10:32
在Javascript中存在isFinite(),如果一个数字是有限的或者不是有限的,它就返回。所以:
var result = isFinite(Number((((0-18)/0)*100).toFixed(2))) || 0;
console.log(result);
发布于 2019-10-12 16:51:44
最快的方法是使用按位而不是运算符:
var result = ~~Number((((0-18)/0)*100).toFixed(2))它的执行速度比其他方法快得多,编写起来也更短。
发布于 2019-10-12 17:11:56
我从“Riccardo”中获得第二个答案。另一种方法可以是使用Javscript中的以下两点。
**Any number % Infinity === number**
**(Infinity || -Infinity) % Infinity === NaN**所以你基本上可以把你的代码重写为..。
Number((((0-18)/0)*100).toFixed(2)) % Infinity || 0你可以试试下面的片段。
console.log(Number((((0-0)/3)*100).toFixed(2)) % Infinity || 0);
console.log(Number((((0-1)/0)*100).toFixed(2)) % Infinity || 0);
console.log(Number((((1-0)/0)*100).toFixed(2)) % Infinity || 0);
console.log(Number((((1-2)/0)*100).toFixed(2)) % Infinity || 0);
console.log(Number((((1-2)/2)*100).toFixed(2)) % Infinity || 0);
console.log(Number((((0-18)/0)*100).toFixed(2)) % Infinity || 0);
https://stackoverflow.com/questions/58355900
复制相似问题