为什么结果不一样



我不明白为什么的结果

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))
这里的结果将再次与之前相同

最新更新