public static void main(String[] args) {
double firstDouble = 1.8d;
double secondDouble = 1.65d;
float firstFloat = 1.8f;
float secondFloat = 1.65f;
System.out.println("DOUBLE SUM : "+(firstDouble + secondDouble));
System.out.println("FLOAT SUM :"+(firstFloat + secondFloat));
System.out.println("DOUBLE SUM"+firstDouble + secondDouble);
System.out.println("FLOAT SUM"+firstFloat + secondFloat);
}
OUT PUT:
DOUBLE SUM : 3.45
FLOAT SUM :3.4499998
DOUBLE SUM :1.81.65
FLOAT SUM :1.81.65
我的问题
1)在第一组输出中,为什么它为相同的值提供不同的值3.45
和3.4499998
2)在第二组中,为什么输出与第一轮输出不同。
提前致谢...
答案 0 :(得分:1)
System.out.println("DOUBLE SUM"+firstDouble + secondDouble);
此处参数采用String
。和plus / addition运算符作为String concatition工作。支架具有更多的优点,因此首先进行评估。
第一个问题已经回答了。 Please find here
答案 1 :(得分:0)
在第二组中你错过了括号,它在System.out.println
语句“Double sum”和“Float sum”中使用String执行其他操作,因此在算术表达式中添加括号以获得正确的结果
System.out.println("DOUBLE SUM : "+(firstDouble + secondDouble));
System.out.println("FLOAT SUM :"+(firstFloat + secondFloat));
System.out.println("DOUBLE SUM"+ (firstDouble + secondDouble));
System.out.println("FLOAT SUM"+(firstFloat + secondFloat));
这给出了
DOUBLE SUM 3.45
FLOAT SUM 3.4499998
DOUBLE SUM 3.45
FLOAT SUM 3.4499998
答案 2 :(得分:0)
1)因为浮点数不够精确,无法精确计算和(3.45-3.4499998)= 2E-7 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3
2)"DOUBLE SUM"+firstDouble
将firstDouble转换为String并连接它们,然后连接secondDouble。当你把()它首先计算总和,并将结果连接到“双和”
答案 3 :(得分:0)
这非常有用:http://floating-point-gui.de/languages/java/
对于简短的回答,在处理浮点时尝试使用BigDecimal。
BigDecimal a = new BigDecimal("1.8");
BigDecimal b = new BigDecimal("1.65");
BigDecimal c = a.add(b); // returns a BigDecimal representing exactly 3.45