float在Java中使用的坑

2023-05-06 20:25:08 浏览数 (1)

floatjava中打印用科学技术法表示 可以打印小数点后8位小数,但是准确表示的只有小数点后6位

代码语言:javascript复制
public class Test {
    public static void main(String[] args) {
        float f1 = 412345678f;
        float f2 = 4123456789f;
        System.out.println(f1);
        System.out.println(f2);
    }
}

打印结果 4.12345664E8 4.12345677E9

可以看出,在科学技术法中,只有小数点后6位是准确的 至于为什么后两位表示不准确差异这么大,因为数字在计算机中用二进制存储,而有些小数无法用有限长度的二进制表示。

代码语言:javascript复制
public class Test {
    public static void main(String[] args) {
        float f = 41234567f;
        System.out.println(f   1 == f);
        System.out.println(f   2 == f);
        System.out.println(f   3 == f);
    }
}

打印结果 true true false

这说明,至少影响了科学技术法中小数点后第六位的时候,才会判别两个float数字之间的差别。这里f 1f 2都没有产生进位,没有影响小数点后第6位,f 3进位,影响了科学技术法小数点后第六位,所以才识别出差异。

一般不要使用float,除非特殊场景需要,一般用double,银行金额计算用BigDecimal

0 人点赞