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

时间:2012-01-23 12:11:00

标签: java nan

我有一个double[],其值为NaN。当我添加数组的元素时,NaN也会生成结果NaN

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

7 个答案:

答案 0 :(得分:22)

NaN代表Not-a-Number。它可以是arise in a variety of ways,例如0./0.sqrt(-1)的结果,或者是涉及其他NaNs的计算结果。

检查v是否为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;
}

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

答案 1 :(得分:4)

NaN代表“不是数字”,所以“不是数字”+ 10 =“不是数字”

您可能需要考虑调试您的应用以找到双数组中的内容:)

答案 2 :(得分:3)

  

我怎样才能防止这个NaN被添加到我的double []

的其余部分

这样:

double[] array = something;
double sum = 0;
for (int i = 0; i < array.length; i++) {
  if (!Double.isNaN(array[i])) {
    sum += array[i];
  }
}

答案 3 :(得分:1)

RTFM:

NaN

的Javadoc
  

public static final double NaN

  保持double类型的Not-a-Number(NaN)值的常量。它相当于Double.longBitsToDouble(0x7ff8000000000000L)返回的值。

并且relevant section of the JVM spec表示涉及NaN的任何操作一个NaN(有点像SQL中的null

答案 4 :(得分:1)

你不能忽视NaN,这是你计划问题的一个指标。你需要找出导致NaN的原因并解决它。

答案 5 :(得分:0)

NaN - 不是数字

顺便说一句:

double[] array = new double[10];
String result = StringUtils.join(array);
System.out.println(result+ " BATMAN !");

答案 6 :(得分:0)

Java不是我的强项,但在其他语言中,这来自于从字符串中分配值。试试这个:

parseDouble

public static double parseDouble(String s)
                          throws NumberFormatException

返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行。 参数: s - 要解析的字符串。 返回: 字符串参数表示的double值。 抛出: NumberFormatException - 如果字符串不包含可解析的double。 以来: 1.2 也可以看看: 的valueOf(字符串)

取自here