什么是NaN?以及如何创建?

lon*_*ome 2 java nan

我有一个double[]它有一个值NaN.当我添加数组的元素时,也会NaN产生结果NaN.

这是怎么发生的?如何防止将NaN其添加到我的数组的其余部分?

NPE*_*NPE 22

NaN代表非数字.它可以以多种方式产生,例如,作为结果0./0.,sqrt(-1)或作为计算的结果涉及其他NaNs.

检查是否v为a 的最简单方法NaN是使用Double.isNaN(v):

public static double sum(double arr[]) {
  double sum = 0.0;
  for (double val : arr) {
    if (!Double.isNaN(val)) {
      sum += val;
    }
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

编辑: @Stephen C在评论中提出了一个很好的观点:在决定忽略NaN它之前,理解它的来源是明智的.它可能是你的代码中其他地方出现错误的结果,而盲目地忽略了NaN你可能只是掩盖了bug而不是修复它.

  • 不错的建议......但也很危险.如果你忽略NaN而不了解它们的来源,你就有可能在程序中隐藏错误并产生无效输出. (2认同)