0

嗨,伙计们,我对这门语言有点陌生

public class fibonacci {

/**
 * @param args
 */
public static int fibonaccifun(int number)

{
    int firstvar=1;
    int secondvar=0,total=0,sum=0;
    for(int i=0;i<number;i++)
    {
        total =firstvar+secondvar;
        System.out.println(total);
        firstvar=secondvar;
        secondvar=total;
        sum+=total;

    }

return sum;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub



     float aver= (float) ( fibonacci.fibonaccifun(5)/5);
    System.out.println(aver);

.....................................

当我尝试

float aver= (float) ( fibonacci.fibonaccifun(5))/5;结果是 2.4 这是正确的值,但是当我这样做时

float aver= ((float) fibonacci.fibonaccifun(5)/5); 平均值=2.0;

我不知道为什么会这样,任何人都可以帮我解释一下,谢谢。

4

3 回答 3

3

因为在第二种情况下

fibonacci.fibonaccifun(5)/5

转到 2,因为fibonaccifun和 5 的结果都是整数,然后你将其转换为浮点数。(如果把2个int相除,结果就是一个int,而int显然不能有小数)

在第一种情况下

(float) ( fibonacci.fibonaccifun(5))

得出fibonaccifun浮点数的结果,然后进行除法。

于 2012-07-12T14:12:44.477 回答
0

您至少需要转换分子或分母

((float) fibonacci.fibonaccifun(5)/5)

您正在划分 2 个整数。除了转换为 float 的 int 之外,您永远不会得到任何东西(因此是 2.0)

使固定:

(((float) fibonacci.fibonaccifun(5))/5)
于 2012-07-12T14:15:56.760 回答
0

运算顺序:在数学和计算机编程中,运算顺序(有时称为运算符优先级)是用于明确阐明在给定数学表达式中应首先执行哪些过程的规则。

http://en.wikipedia.org/wiki/Order_of_operations

括号 指数 乘法 除法 加法 减法

这是一个完美的例子,说明仅仅一个括号的切换就可以将整个程序的逻辑抛出门外。

于 2012-07-12T14:18:58.240 回答