Java中Float的最大值是多少?

31
以下的问题指出 Double 的最小值为 -Double.MAX_VALUE。那么 Float 的情况是否也一样(即 -Float.MAX_VALUE)?(参考链接)

1
你的意思是-Float.MAX_VALUE吗? - dckrooney
1
为什么这个不是真的?这里 - CoolBeans
1
@CoolBeans 阅读他的链接问题;他谈论的是“具有最大幅度的负数”。 - dlev
1
@dlev 是的,我指的是“具有最大幅度的负数”。 - Jérôme Verstrynge
5个回答

31

是的,-Float.MAX_VALUE是最大幅度的负数。float的表示方式与double相同,只是存储空间减半(伴随着精度损失)。由于IEEE 754标准中符号是用单个比特位表示的,翻转该比特位不会改变剩余比特位可达到的总体大小。


19

是的 - 它与Float.MAX_VALUE具有相同的位模式,只是符号位取反了... 这是另一种获取该值的方式:

public class Test {
    public static void main(String[] args) {
        // Float.MAX_VALUE is intBitsToFloat(0x7f7fffff)
        // so we set the most significant bit - the sign bit
        float f = Float.intBitsToFloat((int) 0xff7fffff);
        System.out.println(f == -Float.MAX_VALUE); // true
    }
}

19

编辑:我的原始答案似乎非常不正确。感谢@aioobe指出这一点。

相反,使用Java代码的魔力来回答标题问题:

System.out.printf( "Float.MAX_VALUE: %,f\n", Float.MAX_VALUE );

Float.MAX_VALUE: 3.4028235E38

(这是一个表示最大浮点数的常量,其值约为340亿亿亿。)

System.out.printf("in scientific notation: %.18g\n", Float.MAX_VALUE );

科学计数法表示:3.40282346638528860e+38

System.out.printf(
            "in hexadecimal floating-point number with a significand and "
            + "an exponent: %a", Float.MAX_VALUE );

在十六进制浮点数中,有一个尾数和一个指数:0x1.fffffep127


6

1

是的,正如您链接的问题的答案所述,浮点数和双精度浮点数使用IEEE754表示法,这是由于它们存储方式的“对称性”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接