我正在努力在java上制作计算器,类似于我们计算机上的计算器。我坚持试图复制这种情况。
电脑计算器:
5 / 2 = 2.5 * 2 = 5
所以基本上......
int/int = double * int = int
这是怎么回事?大声笑,我能做的最接近的是:
int num_1 = 5;
int num_2 = 2;
double ans = (double) num_1/num_2;
double num_1 = ans;
int num_2 = 2;
int ans = num_1*num_2;
但我无法重新声明变量名称,所以我该如何编程......哈哈
如果这有帮助,我的程序中有3个变量:
int currentValue // value displayed when number key is pressed *** eg: 2, 3, etc
int runningValue // value of running total *** eg: 2 + 2 + (right now a runningValue of 4 is shown on the computer calculator)
int finalValue // value given when the equal sign is pressed 5 + 5 = 10
帮助?
答案 0 :(得分:1)
由于计算器无论如何都要使用浮点数,因此最简单的方法是使用double
来处理所有事情。
如果您想要任意精确度并且在Java
,则可以使用BigDecimal
。
答案 1 :(得分:1)
不要转换数据类型。请参阅luser droog的回答。使用那些建议的算法。然后继续获取用户输入并继续评估(比如说进入双中间结果变量)。最后,根据它是否在小数点后面有任何数字,以巧妙的方式格式化该双重中间结果变量(现在是最终结果)的值。
另见:
答案 2 :(得分:0)
如果您想评估来自用户输入的代数表达式,我非常建议您研究The Shunting-Yard Algorithm和Stack抽象数据类型。您的表达式不会直接转换为C语言或Java语法,而是以字符串或文本流的形式输入。然后使用堆栈和算法,您将评估表达式而不为所有内容创建“变量”。在顶层,您需要的唯一变量是两个堆栈和输入表达式。
而且,正如merlin2011所说,你可以跳过所有的类型分析。这种类型的应用程序太过分了。只需对所有中间体和结果使用一致的类型。
要获得灵感,请查看this question的答案。此外,这里的an evaluator in Java that使用递归来保存调用堆栈上的中间结果,而不是分配堆栈数据类型。 (忽略我对这个问题的回答,这与其他问题完全不同。)