如何在JavaScript中获得一些数学错误

时间:2016-05-20 20:54:47

标签: javascript node.js

我在Node.js中做了一些数学运算,我遇到了一些情况,其中我希望给出错误的计算,例如除以0和对数为0,不会这样做

我已经阅读了文档和其他一些Q / As,我知道返回像Infinity和-Infinity这样的东西是Javascript中的正常行为。我不是在争论/反对这个。

但是,我想知道,如果有一种聪明的方法可以让JavaScript给我一个错误,而不是在发生这种情况时继续计算。最大的问题是,有时会在长而复杂的计算过程中生成无穷大或无穷大,并且该数字将继续使用,最终整体计算将返回一个正常的数字,这是完全错误的。这很难调试,因为我们无法直接了解错误发生的位置,因为没有错误被抛出,Infinity是JS中可接受的数字。

虽然Best way to prevent/handle divide by 0 in javascript的答案为可能发生这种情况的具体已知案例提供了答案,但我正在寻找一种全面的解决方案来检测何时可能发生这种情况,而不是寻找可能发生的每一种情况。或者在我去的时候发现每个案例。

2 个答案:

答案 0 :(得分:1)

例如,如果除法为divide,则可以创建一个抛出错误的函数Infinity

const divide = function(dividend, divisor) {
  const result = dividend / divisor
  if (Math.abs(result) === Infinity) {
    throw new Error("Division by zero")
  }
  return result
}

然后在计算中,不使用除法运算符,而是使用该函数:

const fourDividedByTwo = divide(4, 2) // gives 2
const oneDividedByZero = divide(1, 0) // throws error

答案 1 :(得分:0)

简短的回答是不要使用javascript进行任何严肃的数学运算。 Javascript是容错的(这就是为什么它有Infinity,-Infinity,-0和NaN),但数学不是。当你尝试不可能的事情时,数学应该失败。

正如Gothdo所说,为行为创建自定义函数会起作用。

如果你在可以用JSON对象表示的更复杂的对象(例如Point,Vector或Spaces)上进行数学运算,那么有一种方法可以使vanilla运算符重载。

http://www.2ality.com/2011/12/fake-operator-overloading.html

的完整资源

https://github.com/rauschma/op_overload

这有点棘手,并不仅仅比使用功能更实用,但它有点酷。