我有一个double[]
,其值为NaN
。当我添加数组的元素时,NaN
也会生成结果NaN
。
它是怎么发生的?如何防止将此NaN
添加到数组的其余部分?
答案 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)
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。