float vs double(在Java中)

时间:2013-01-21 17:59:40

标签: java floating-point-precision

在给定相同输入的情况下,是否存在这两种方法会返回不同值的情况?

int compare1(float a, float b)
{
    return Double.compare(a, b);
}

int compare2(float a, float b)
{
    return Float.compare(a, b);
}

出于同样的原因,java的Float中存储的任何数字都可以存储在java的Double中而不会丢失任何精度,这是真的(或错误的)吗?

由于

3 个答案:

答案 0 :(得分:8)

<击>是;将双精度投射到浮点数会产生不同的结果。

如果ab之间的差异太小而无法显示在浮点数中,compare2()将返回0compare1() 1}}不会。


您刚刚编辑了问题以反转您的要求。新的答案是:

我几乎可以肯定他们永远都是一样的。

答案 1 :(得分:4)

Every float can be represented exactly as a double.由此得出两个函数总是返回相同的结果。

答案 2 :(得分:1)

double只会提供比float更多的小数位以外的精度位。如果所有这些额外位都为零,那么您具有与float相同的值。所以,是的,所有float都可以转换为double而不会丢失精度。