java - 黑莓计算器

标签 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.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;

    }

最佳答案

问题是由于您将数字存储为长整型,因此由于数据类型而丢失了小数。用于存储小数的更好的数据类型是 double 型,因为它允许小数并且具有对于计算器来说应该足够的范围

关于java - 黑莓计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21722155/

相关文章:

java - 在加载应用上下文之前启动一个 Servlet

browser - 如何在黑莓中打开 webview?

java - 每行高度可变的黑莓列表字段?

java - setRequestProperty方法的 "If-Modified-Since"参数的作用是什么?

java - 长时间运行和阻塞 javafx 任务进度条更新

java - 将 ArrayList 从 Java 传递到 PHP Web 服务

java - 是否可以使用框架 spring 5 运行 java 10?

java - BlackBerry - 是否可以开发品牌应用程序?

java - (J2ME) 如何在 midlet 中检索设备颜色深度?

java - 在科威特获取选定的单选按钮