【问题标题】:Why the result is not the same?为什么结果不一样?
【发布时间】:2015-07-20 02:43:11
【问题描述】:

我不明白为什么会出现以下结果:

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

不同于:

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

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

【问题讨论】:

  • 你使用什么语言?
  • 在第一种情况下,4/3 可能是整数除法,结果是 1
  • @LeonidShevtsov - 代码与 Java 一致。

标签: operator-precedence


【解决方案1】:

首先检查运算符的优先级。
在您的情况下,优先顺序是:
() > * > / (注意:此优先级适用于 C 运算符)

因此对于上述操作,两种情况的结果必须相同。

我们来看看
案例一:
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))
这里的结果会和以前一样

【讨论】:

    【解决方案2】:

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

    这段代码:

        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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多