Java 黑莓计算器
嗨,我正在使用计算器,但我没有得到正确的输出。例如Java 黑莓计算器,java,blackberry,java-me,Java,Blackberry,Java Me,嗨,我正在使用计算器,但我没有得到正确的输出。例如 4+(1/2)+8 所需的输出是12.5,但我的代码返回12.0 我已经使用了这个代码,但这不会给出四舍五入的值 public String evaluatePostfix(String postfix){ LongStack S = new LongStack(); float resout; //answer for val1 and val2 Dialog.ale
4+(1/2)+8
所需的输出是12.5,但我的代码返回12.0
我已经使用了这个代码,但这不会给出四舍五入的值
public String evaluatePostfix(String postfix){
LongStack S = new LongStack();
float resout;
//answer for val1 and val2
Dialog.alert("postfix: "+postfix + "length "+ postfix.length());
for(int k = 0; k < postfix.length(); k++)
{
char c =postfix.charAt(k);
if( c >= '0'&& c <= '9')//i < tokens.length && (Character.isDigit(tokens[i]) || tokens[i] == '.')
S.push((c - '0'));
else if (c == '+' || c== '-' || c == '*' || c == '/' || c == '%' || c == '~')
{
if(S.isEmpty()) throw new RuntimeException("Empty Stack");
float RightOp = S.pop();
Dialog.alert(": "+ RightOp);
if( c == '~') S.push( (long) -RightOp);
if(S.isEmpty()) throw new RuntimeException("Empty Stack.");
switch (c)
{
case '+' : S.push((long) (S.pop() + RightOp)); break;
case '-' : S.push((long) (S.pop() - RightOp)); break;
case '*' : S.push((long) (S.pop() * RightOp)); break;
case '/' : S.push((long) (S.pop()/ RightOp)); break;
case '%' : S.push((long) (S.pop() % RightOp)); break;
}// END of switch
}
else if ( c != ' ')throw new RuntimeException("Error!");
}
Dialog.alert(Long.toString(S.pop()));
Float fX = new Float(S.pop());
Formatter f = new Formatter();
String result = f.formatNumber(fX.floatValue(), 2);
return result;
}
公共字符串evaluatePostfix(字符串后缀){
LongStack S=新LongStack();
浮动资源;
//val1和val2的答案
Dialog.alert(“后缀:+postfix+“length”+postfix.length());
对于(int k=0;k 如果(c>='0'&&c问题在于,由于您将数字存储为长数值,因此由于数据类型的原因,您丢失了小数。用于存储小数的更好数据类型是双精度数据类型,因为它允许小数,并且其范围应足以用于计算器您的命名非常混乱。请遵循@ᴍ阿伦ᴍaroun我的要求是这样的,只有任何人可以根据我的要求提供解决方案。我使用了这段代码,但这不会给出四舍五入的值Float fX=new Float(S.pop());Formatter f=new Formatter();//还尝试了指定的语言环境-Formatter(“en”)String result=f.formatNumber(fX.floatValue(),2);问题可能在您计算的早期出现。没有提供足够的代码来解决这个问题。@MichaelDonohue以上是我的完整代码。您使用的是LongStack,所以不会执行长数学吗?1l/2l==0l