相关疑难解决方法(0)

为什么Double.NaN == Double.NaN返回false?

我只是在研究OCPJP问题,我发现了这个奇怪的代码:

public static void main(String a[]) {
    System.out.println(Double.NaN==Double.NaN);
    System.out.println(Double.NaN!=Double.NaN);
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我得到了:

false
true
Run Code Online (Sandbox Code Playgroud)

false当我们比较两个看起来彼此相同的东西时,输出结果如何?什么NaN意思?

java floating-point scjp nan ocpjp

154
推荐指数
5
解决办法
6万
查看次数

Float.NaN == Float.NaN

为什么这种比较会让我"假"?我查看了源代码并将Float.NaN定义为

/** 
 * A constant holding a Not-a-Number (NaN) value of type
 * <code>float</code>.  It is equivalent to the value returned by
 * <code>Float.intBitsToFloat(0x7fc00000)</code>.
 */
public static final float NaN = 0.0f / 0.0f;
Run Code Online (Sandbox Code Playgroud)

编辑:令人惊讶的是,如果我这样做:

System.out.println("FC " + (Float.compare(Float.NaN, Float.NaN)));
Run Code Online (Sandbox Code Playgroud)

它给了我0.因此,Float.compare()不认为NaN的等于本身!

java floating-point comparison nan

28
推荐指数
2
解决办法
2万
查看次数

测试浮点相等.(FE_FLOATING_POINT_EQUALITY)

我在ANT脚本中使用了一个findbugs,我无法弄清楚如何解决我的两个错误.我已阅读文档,但不明白.以下是我的错误以及与之相关的代码:

错误1:测试浮点相等性.(FE_FLOATING_POINT_EQUALITY)

private boolean equals(final Quantity other) {
    return this.mAmount == convertedAmount(other);
}
Run Code Online (Sandbox Code Playgroud)

错误2:EQ_COMPARETO_USE_OBJECT_EQUALS

public final int compareTo(final Object other) {
    return this.description().compareTo(((Decision) other).description());
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了ComparesTo问题的文档

强烈建议,但并非严格要求(x.compareTo(y)== 0)==(x.equals(y)).一般来说,任何实现Comparable接口并且违反此条件的类都应该清楚地表明这一事实.推荐的语言是"注意:此类具有与equals不一致的自然顺序."

还有关于浮点平等的文档

此操作比较两个浮点值是否相等.由于浮点计算可能涉及舍入,因此计算的浮点值和双精度值可能不准确.对于必须精确的值,例如货币值,请考虑使用固定精度类型,例如BigDecimal.对于不必精确的值,请考虑比较某些范围内的相等性,例如:if(Math.abs(x-y)<.0000001).请参阅Java语言规范,第4.2.4节.

我不明白.有人可以帮忙吗?

java ant findbugs

20
推荐指数
2
解决办法
3万
查看次数

检查输入的数字是否具有整数值

首先,我是C#的初学者,我刚开始玩它,因为这是我的大学课程所要求的.

我的问题是一个任务问题,上面写着:

h)测试输入的数字是否具有整数值.提示:数字必须是Double类型.例如,如果数字是2.5,则没有整数值但是2.您将需要使用Convert.ToInt32(TheNumber)将Double转换为Int然后比较两者.

double a, b, result;
            Console.WriteLine("Input a number");
            a = Convert.ToDouble(Console.ReadLine());
            b = Convert.ToInt32(a);
Run Code Online (Sandbox Code Playgroud)

这就是我目前所拥有的,我不知道如何比较这些2来测试哪一个是整数.我很确定你必须使用if语句但是如何告诉C#测试这两个数字中的哪一个是整数而哪一个不是!

任何帮助都非常感谢:)

c#

3
推荐指数
1
解决办法
8073
查看次数

标签 统计

java ×3

floating-point ×2

nan ×2

ant ×1

c# ×1

comparison ×1

findbugs ×1

ocpjp ×1

scjp ×1