简单的Java计算器(需要十进制帮助)

时间:2014-10-26 04:40:58

标签: java

好的所以这是我简单的java计算器一切正常我只需要帮助允许小数。非常感谢谁帮助我,这是一个学校项目,所以我需要一个非常快的答案:)

import java.util.Scanner;

public class javaProject

{

    public static void main(String[] args) 
    {
        int x;
        int y;
        String whatOp;      

        Scanner input = new Scanner(System.in);

        System.out.println("please enter the first number");
        x = input.nextInt();

        System.out.println("please enter the second number");
        y = input.nextInt();

        Scanner op = new Scanner(System.in);

        System.out.println("Please enter the operation you want to use");
        whatOp = op.next();

        if (whatOp.equals("+"))
        {
            System.out.println("The answer is " + (x + y));
        }
        else if  (whatOp.equals("-"))
        {
            System.out.println("The answer is " + (x - y));
        }
        else if (whatOp.equals("*"))
        {
            System.out.println("The answer is " + (x * y));
        }
        else if (whatOp.equals("/"))
        {
            System.out.println("The answer is " + (x / y));
        }
        else
        {
           System.out.println("Thats not a choice!");
        }  
    }
}

6 个答案:

答案 0 :(得分:2)

请注意!与计算器一起使用时,floatdouble会让您心碎。这些类型不用于纳税或平衡支票簿。为什么?因为他们不使用像你和我这样的10位数字。他们使用二进制数字。使用整数来说没有问题,但是有分数会遇到难以看到的问题,因为java接受它们在基数10中,在基数10中显示它们,但它不会在基数10中存储它们。

这可能会让人很难意识到floatdouble中没有0.1这样的东西。完全表达是不可能的,因为π对我们来说是基数10.当你把它拉出来时,它可能会显示那种方式,因为四舍五入但不是存储的东西,这不是你的'我会计算。这就是计算器不使用IEEE浮点数和双精度数的原因。这些类型适用于科学仪器,用于进行测量和精确限制的计算。如果您正在建模一个像小学一样的计算器,请注意那些因为这个原因不使用IEEE浮点数或双精度计算器。

有关此问题的更多信息read thisthis

相反,一些非常聪明的人创造了一些非常适合建模计算器的东西:java.math.BigDecimal;

如果你是视觉类型让我告诉你一些可能使BigDecimal和float之间有区别并且双重清楚的东西:

Inch rulers

这些统治者都表现出英寸。对于整个英寸,它们之间没有区别。但是,它们以不同的方式划分最上面的一个除以10。底部除以2。顶部可以通过BigDecimal完美建模。底部可以通过浮动或双重完美建模。一些刻度将排列成.5因为5/10 = 1/2但是1/10 = x /(2 ^ n)没有x和n是整数的解。

因为人类在计算器中使用十进制数字的传统很长,所以我不建议在会计附近任何地方放置花车或双打。

import java.math.BigDecimal;
import java.util.Scanner;

public class javaProject
{

    public static void main(String[] args) 
    {
        BigDecimal x; 
        BigDecimal y;
        String whatOp;


        Scanner input = new Scanner(System.in);

        System.out.println("please enter the first number");
        x = input.nextBigDecimal(); 

        System.out.println("please enter the second number");
        y = input.nextBigDecimal(); 

        Scanner op = new Scanner(System.in);

        System.out.println("Please enter the operation you want to use");
        whatOp = op.next();

        if (whatOp.equals("+"))
        {
            System.out.println(  "The answer is " + ( x.add(y) )  );
        }
        else if  (whatOp.equals("-"))
        {
            System.out.println(  "The answer is " + ( x.subtract(y) )  );
        }
        else if (whatOp.equals("*"))
        {
            System.out.println(  "The answer is " + ( x.multiply(y) )  );
        }
        else if (whatOp.equals("/"))
        {
            System.out.println(  "The answer is " + ( x.divide(y) )  );
        }
        else
        {
           System.out.println("Thats not a choice!");
        }
    }
}

答案 1 :(得分:1)

我希望你理解原始类型,比如int,double等。

如果你想允许小数,你说你想要双打。所以你只需要确保你接受双打,然后用双打进行数学运算,而不是整数数学。

import java.util.Scanner;

public class javaProject

{

public static void main(String[] args) 
{
    double x; //changed both to doubles
    double y;
    String whatOp;


    Scanner input = new Scanner(System.in);

    System.out.println("please enter the first number");
    x = input.nextDouble(); //changed to nextDouble

    System.out.println("please enter the second number");
    y = input.nextDouble(); //same here

    Scanner op = new Scanner(System.in);

    System.out.println("Please enter the operation you want to use");
    whatOp = op.next();

    if (whatOp.equals("+"))
    {
        System.out.println("The answer is " + (x + y));
    }
   else if  (whatOp.equals("-"))
    {
        System.out.println("The answer is " + (x - y));
    }
   else if (whatOp.equals("*"))
   {
       System.out.println("The answer is " + (x * y));
   }
   else if (whatOp.equals("/"))
    {
        System.out.println("The answer is " + (x / y)); //unchanged, you're now doing decimal math!
    }
   else
    {
       System.out.println("Thats not a choice!");
    }


}
}

要删除尾随.0,您可以轻松删除它们:

if (s.endsWith(".0"))
    s = s.substring(0,s.length() - 2);

还有办法用BigNumber或其他类和复杂的方法来做,但由于这是家庭作业,我认为通过字符串操作就足够了。

答案 2 :(得分:1)

int xint y更改为double xdouble y,现在您也可以处理小数。

答案 3 :(得分:1)

在你的程序中使用整数。因此,不能使用小数。在Java中,有多种类型的变量。要用于小数的那个称为double。整数和双精度都是java中的原始数据类型。如果您想了解有关原始数据类型的更多信息,请查看以下链接:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

要使此计算器能够具有双重类型输入,则需要将x和y更改为双精度而不是整数:

double x;
double y;

在您想要接收用户输入之前,所有内容都是相同的,而不是使用:

 x = input.nextInt();
 y = input.nextInt();

你需要改变.nextInt();到.nextDouble();因为您要输入的数字是双精度而不是整数。像这样:

x = input.nextDouble();
y = input.nextDouble();

我希望这会有所帮助。

答案 4 :(得分:0)

对变量使用double,并使用nextDouble来捕获双倍值。

答案 5 :(得分:0)

对于您的部门代码,只需更改else语句,如下所示:

else if (whatOp.equals("/"))
{
   double tmpX = (new Integer(x)).doubleValue();
   double tmpY = (new Integer(y)).doubleValue(); 
   System.out.println("The answer is " + (tmpX / tmpY));
}