问题1:下面的代码,输出结果是什么:
public class CaclTest{
public void test1(){
float f = 1.0F / 0.0F;
System.out.println("f:" + f)
}
public static void main(String[] args){
CaclTest ct = new CaclTest();
ct.test1();
}
}
A. 运行抛出异常:java.lang.ArithmeticException: / by zero
B. 编译报错
C. 输出Infinity
D. 输出0
解答:
答案应该是C。在Java语言中1.0F/0.0F 表示一个无穷大的数,其在内存中的表示格式为:
0 01111111 00000000000000000000000
第1位为符号位,第2-8位表示指数E,后面23位表示尾数M,即:
同理,浮点数中还有几个特殊的数:
负无穷:NEGATIVE_INFINITY = (1.0F / -1.0F);
空: NaN = (0.0F / 0.0F);
问题2:小明为了帮会计部门统计薪水,设计了一个小程序,并写了测试用例,请问这个程序输出结果是多少?
public class CaclTest{
public float sumSalary(float[] salary){
float sum = 0.0F;
for(int i=0;i<salary.length;i++){
sum += salary[i];
}
return sum;
}
public void test1(){
float[] salarys = new float[]{
100000.34f,
150000.78f,
200000.69f
};
float sum = sumSalary(salarys);
System.out.println("sum:" + sum);
}
public static void main(String[] args){
CaclTest ct = new CaclTest();
ct.test1();
}
}
A. sum: 450001.71
B. sum: 450001.7
C. sum: 450001.8
D. sum: 450001.70
解答:
答案是C。浮点数的精度只有7,8位,超出部分会被丢弃,并不遵从10进制的四舍五入。
在设计会计类的程序时,不宜使用float浮点数进行计算,会计上要求至少精确到分,否则就会出现账不平,这是会计无法接受的,可采用 java.math.BigDecimal类进行计算处理。
说明:这道题如果要手动计算出正确答案,还是比较困难的,只是为了说明float浮点数计算式需要注意的问题。