在计算双数时,例如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得到“错误回答”?这有什么区别?
感谢。
编辑:注意到重复的问题。
答案 0 :(得分:1)
6.0
是double
。 6
是int
。
如果a
和b
也是int
s,那么6*a/b
不是“双重计算” - 它将使用int
算术。
当您在二进制数学运算中混合double
和int
时,int将转换为double,然后使用双精度运算完成操作。因此6.0*a
进行双重乘法(将a
转换为双精度),从而产生双倍。然后(the result of that)/b
也进行双重划分(将b
转换为双倍优先。)
答案 1 :(得分:0)
.0是编译器的指示符,表示常量是浮点数而不是整数。您的表达式6 * a / b
将被视为整数表达式。