转换变量的数据类型

时间:2014-06-14 08:20:20

标签: java calculator type-conversion

我正在努力在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

帮助?

3 个答案:

答案 0 :(得分:1)

由于计算器无论如何都要使用浮点数,因此最简单的方法是使用double来处理所有事情。

如果您想要任意精确度并且在Java,则可以使用BigDecimal

答案 1 :(得分:1)

不要转换数据类型。请参阅luser droog的回答。使用那些建议的算法。然后继续获取用户输入并继续评估(比如说进入双中间结果变量)。最后,根据它是否在小数点后面有任何数字,以巧妙的方式格式化该双重中间结果变量(现在是最终结果)的值。

另见:

DecimalFormat

答案 2 :(得分:0)

如果您想评估来自用户输入的代数表达式,我非常建议您研究The Shunting-Yard AlgorithmStack抽象数据类型。您的表达式不会直接转换为C语言或Java语法,而是以字符串或文本流的形式输入。然后使用堆栈和算法,您将评估表达式而不为所有内容创建“变量”。在顶层,您需要的唯一变量是两个堆栈和输入表达式。

而且,正如merlin2011所说,你可以跳过所有的类型分析。这种类型的应用程序太过分了。只需对所有中间体和结果使用一致的类型。

要获得灵感,请查看this question的答案。此外,这里的an evaluator in Java that使用递归来保存调用堆栈上的中间结果,而不是分配堆栈数据类型。 (忽略我对这个问题的回答,这与其他问题完全不同。)