我不明白为什么的结果
4 / 3 * Math.PI * Math.pow(radio,3)
不同于:
(4 * Math.PI * Math.pow(radio,3)) / 3
我在一个程序中使用这个来计算球体的体积。
首先,让我们插入一些额外的括号。。。用于说明目的:
此代码:
4 / 3 * Math.PI * Math.pow(radio,3)
相当于
((4 / 3) * Math.PI) * Math.pow(radio,3)
换句话说。。。首先我们将4除以3,然后将其乘以Pi,然后将radio
乘以3的幂。
现在让我们来看第一个子表达式(4 / 3)
。由于操作数都是整数,所以这是一个整数除法,它会产生一个整数答案。答案是1
。你真正需要的答案是1.33333...
,但它不是整数。
如何修复?将其中一个或两个数字都更改为double
文字将导致除法被视为浮点(双)除法,这将是对三分之四的最佳近似。
4.0 / 3.0 * Math.PI * Math.pow(radio,3)
首先检查运算符的优先级。
在您的情况下,优先顺序为:
()>*>/(注意:此优先级适用于C运算符)
所以对于上述操作,两种情况下的结果必须相同。
我们走吧
案例1:4 / 3 * Math.PI * Math.pow(radio,3)
Here Math.PI = 3.14
Suppose Math.pow(radio , 3) = 10
In this scenario first multiplication will happen
result = 4*3.14*10 = 125.60000000000001
125.600/3 = 41.86666666666667
案例2:
'(4*Math.PI*Math.pow(无线电,3))/3'
在这里,它将首先计算()块,然后计算/运算符
即(4 * Math.PI * Math.pow(radio,3))
这里的结果将再次与之前相同