如何获得多个小数点?

时间:2014-03-17 21:13:48

标签: java

我正在制作一个简单的计算器(我是初学者),我想知道为什么当我将1除以4时,我得到0.我知道它与数字类型有关。这是我的代码:

private static void calc(int a, int b,String op){
    if (op.equals("add")){
        double ans = a+b;
        System.out.println(ans);
    }
    if(op.equals("subtract")){
        double ans=a-b;
        System.out.println(ans);
    }
    if(op.equals("multiply")){
        double ans=a*b;
        System.out.println(ans);
    }
    if(op.equals("divide")){
        double ans=a/b;
        System.out.println(ans);
    }
}

我无法让我的变量(ans)拥有多个小数点。当答案需要一个(如1/4)时,它只返回0.

请帮助。

2 个答案:

答案 0 :(得分:0)

你需要加倍,因为你的所有结果值都是双倍的。

private static void calc(int a, double b,String op){
}

或者简单地说:

if(op.equals("divide")){
    double ans=(double)a/b;
    System.out.println(ans);
}

答案 1 :(得分:0)

虽然其他评论和答案都是正确的,但它们没有提供足够的细节(IMO)。

虽然ansdouble,但等式右边的值仍为int

double ans = a / b;
// equiv to:
// double ans = (double)(a / b);

所以,当你评估这个时,你会得到:

double ans = (double)(1/4);
           = (double)(0);
           = 0.0d;

要解决此问题,您需要将一个或两个操作数强制转换为double

double ans = ( (double) a ) / ( (double) b );
           = ( (double) 1 ) / ( (double) 4 );
           = 1.0d / 4.0d;
          ~= 0.25d;

还要注意关于@ Salah的回答,从整数到双重的转换刚刚被移动。由于您可以隐式地将int转换为double,因此使用整数(例如文字1)调用该函数会自动将整数转换为double。但是,您可能不希望允许将非整数传递给您的函数,如果是这样,那么此解决方案将不正确。