双重计算中“.0”的差异

时间:2015-01-15 02:48:12

标签: java double

在计算双数时,例如6.0和6之间有什么区别? 因为当我解决在线评判问题时,表达方式

estimatedPI = Math.sqrt(6*a/b);
OJ得到了“错误回答”,而

estimatedPI = Math.sqrt(6.0*a/b);

在OJ上获得了“接受”。

对于输出,因为我使用了

String result;
result = String.format("%.6f\n",estimatedPI);
System.out.print(result);

所以输出看起来完全一样,小数点后面有六位数。

estimatePI声明为double,a,b声明为int。

那么为什么6.0得到“接受”而6得到“错误回答”?这有什么区别?

感谢。

编辑:注意到重复的问题。

2 个答案:

答案 0 :(得分:1)

6.0double6int

如果ab也是int s,那么6*a/b 是“双重计算” - 它将使用int算术。

当您在二进制数学运算中混合doubleint时,int将转换为double,然后使用双精度运算完成操作。因此6.0*a进行双重乘法(将a转换为双精度),从而产生双倍。然后(the result of that)/b也进行双重划分(将b转换为双倍优先。)

答案 1 :(得分:0)

.0是编译器的指示符,表示常量是浮点数而不是整数。您的表达式6 * a / b将被视为整数表达式。