在接受用户输入的javascript中防止被0除的最佳方法是什么。如果没有特定的方法来实现这一点,那么处理这种情况以免阻止其他脚本执行的最佳方法是什么?
非常感谢任何见解。
在接受用户输入的javascript中防止被0除的最佳方法是什么。如果没有特定的方法来实现这一点,那么处理这种情况以免阻止其他脚本执行的最佳方法是什么?
非常感谢任何见解。
/
使用普通和运算符无法做到这一点/=
。
做你想做的最好的方法是使用警卫:
function notZero(n) {
n = +n; // Coerce to number.
if (!n) { // Matches +0, -0, NaN
throw new Error('Invalid dividend ' + n);
}
return n;
}
然后像这样做除法
numerator / notZero(denominator)
或者,您可以随时保护输出
function dividend(numerator, denominator) {
var quotient = numerator / denominator;
if (quotient !== quotient) { throw new Error(numerator + " / " + denominator); }
return quotient;
}
但这失去了/=
.
在我的脑海中,你可以:
isFinite()
如果没有,则适当处理。处理这种情况的最佳方法是什么,以免阻止其他脚本执行
除以零似乎并不能阻止其他脚本在 JavaScript 中执行:
var a = 20;
var b = 0;
var result = a/b;
console.log(result); // returns Infinity
如果您希望在除以零的情况下发生不同的事情,您可以使用
function divideIfNotZero(numerator, denominator) {
if (denominator === 0 || isNaN(denominator)) {
return null;
}
else {
return numerator / denominator;
}
}
希望这是有用的
(denominator != 0 ? numerator/denominator : Infinity)
或者你想放在最后的任何值。
问候。
return false;
作为停止提交的值。为什么不检查分母是否为零?
if(x != 0) z = y / x;
您还可以检查结果是否为 Infinity:
3 / 0 == Infinity
结果true
;
(仅在 chrome 中测试。)
最好的方法是上下文。但这是最简单的:
function myFunction( input ){
input = 0 ? 0.0001 : input; // same as if( input == 0 ){ input = 0.0001; }
return 1 / input;
}
基本上如果输入为零,在用作分母之前将其变成一个非常小的数字。非常适合整数,因为在除法之后,您可以将它们向下舍入。
有几个注意事项可以防止这种情况普遍存在:
所以它最适合通用的、非关键的情况。例如,如果您需要返回复杂计算的结果,而不关心答案是否精确到 N 位(由 0.0001 与 0.00000001 等确定);您只是不希望它在被零除时中断。
正如另一个答案所建议的那样,您还可以创建一个可重用的全局函数。
function divisor( n ){ return ( n = 0 ? 0.0001 : n ); }
function myFunction( input ){ return 1 / divisor( input ); }
可能的改进:
function divisor( n, orError ){
if( typeof n == 'undefined' || isNaN( n ) || !n ){
if( orError ){ throw new Error( 'Divide by zero.' ); }
return 0.000000000000001;
}else{ return 0 + n; }
}
这将采用任何值(null、数字、字符串、对象),如果无效或为零,则返回类似零的故障安全值。它还会强制输出为一个数字,以防万一它是一个字符串并且你正在做一些奇怪的事情。所有这些都将确保您的除数函数始终有效。最后,对于您想自己处理此类错误的情况,您可以将第二个参数设置为 true 并使用try/catch
.
与停止执行有点不同,但三元运算符是自定义变量分配的一种非常巧妙的方法。
var one = 1,
zero = 0,
customValue = 1;
var quotient = zero===0 ? customValue : one / zero;
这样,通过将 customVariable 设置为您选择的整数,您可以在除以零时获得可预测的结果。