为什么结果不一样?

时间:2015-05-09 05:35:26

标签: operator-precedence

我不明白为什么结果:

4 / 3 * Math.PI * Math.pow(radio,3)

不同于:

(4 * Math.PI * Math.pow(radio,3)) / 3

我在程序中使用它来计算球体的体积。

2 个答案:

答案 0 :(得分:0)

首先检查运营商的优先级。
在您的情况下,优先顺序是:
()> *> /(注意:这个优先级适用于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(radio,3))/ 3'


首先它将计算()块然后/运算符
(4 * Math.PI * Math.pow(radio,3))
这里的结果将与以前相同

答案 1 :(得分:0)

首先,为了说明的目的,我们插入一些额外的括号:

此代码:

    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)