好的所以这是我简单的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!");
}
}
}
答案 0 :(得分:2)
请注意!与计算器一起使用时,float
和double
会让您心碎。这些类型不用于纳税或平衡支票簿。为什么?因为他们不使用像你和我这样的10位数字。他们使用二进制数字。使用整数来说没有问题,但是有分数会遇到难以看到的问题,因为java接受它们在基数10中,在基数10中显示它们,但它不会在基数10中存储它们。
这可能会让人很难意识到float
或double
中没有0.1这样的东西。完全表达是不可能的,因为π对我们来说是基数10.当你把它拉出来时,它可能会显示那种方式,因为四舍五入但不是存储的东西,这不是你的'我会计算。这就是计算器不使用IEEE浮点数和双精度数的原因。这些类型适用于科学仪器,用于进行测量和精确限制的计算。如果您正在建模一个像小学一样的计算器,请注意那些因为这个原因不使用IEEE浮点数或双精度计算器。
相反,一些非常聪明的人创造了一些非常适合建模计算器的东西:java.math.BigDecimal;
如果你是视觉类型让我告诉你一些可能使BigDecimal和float之间有区别并且双重清楚的东西:
这些统治者都表现出英寸。对于整个英寸,它们之间没有区别。但是,它们以不同的方式划分最上面的一个除以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 x
,int y
更改为double x
,double 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));
}