Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 黑莓计算器_Java_Blackberry_Java Me - Fatal编程技术网

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