float
在java
中打印用科学技术法表示
可以打印小数点后8位小数,但是准确表示的只有小数点后6位
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 1
,f 2
都没有产生进位,没有影响小数点后第6位,f 3
进位,影响了科学技术法小数点后第六位,所以才识别出差异。
一般不要使用float
,除非特殊场景需要,一般用double
,银行金额计算用BigDecimal
。