如何找到数字java之间的真正价值

时间:2013-01-15 19:59:28

标签: java

下午好,

考虑到我们有两个数字并且我们想要添加它们但没有任何舍入,我们希望得到真正的价值 因此,如果我们添加0,4 + 0,6要么是double,要么浮动java打印结果1但实际上这不是存储在memmory上的实数。 我试图将它们转换为BigDecimal,但它也打印结果1 !! 但是,当数字具有除0.5之外的分数部分时,转换bigDecimal可以正常工作。

这是一个方法的一部分我正在制作一个带有netbeans的科学计算器用户在textArea中给出一个数学表达式.a将表达式作为一个字符串,然后我将它分离给一个对象的值。数学元素元素可以是一个运营商或号码。 我发布的方法部分只有添加

的情况

如果用户给出表达式0.6 + 0.4我想找到两个结果并打印它们(结果给出0.4 + 0.6 = 1以及此总和的实际结果)

Stack<MathematicElement> stack = new Stack<MathematicElement>();
    BigDecimal pin[]=new BigDecimal[post.length];
    BigDecimal b1;
    BigDecimal flo[]=new BigDecimal[post.length];
    BigDecimal f1;
    float f;
    int k=0;
    for (int i = 0; i < post.length; i++) {
        if (post[i].isNumber) {
            stack.push(post[i]);
            pin[0]=new BigDecimal(post[i].number);
            flo[0]=new BigDecimal(new Float(post[i].number));
            continue;

        }
        if (post[i].isOperator) {
            MathematicElement mx2 = stack.pop();
            double modifier;
            if(system==MathematicalNumberingSystem.DEGREES)
                modifier = pi/180;
            else
                modifier = 1;
            double x2 = mx2.number, x1, y;
            float f2=new Float(x2);
            BigDecimal f22=new BigDecimal(f2);
            BigDecimal b2=new BigDecimal(x2);
            switch (post[i].operator) {
                case PLUS:
                    x1 = stack.pop().number;
                    b1=new BigDecimal(x1);
                    pin[0]=b1.add(b2);
                    f=new Float(x1);
                    f1=new BigDecimal(f);
                    flo[0]=f1.add(f22);
                    //System.out.format("the b1=%20.16f  and the b2=%20.16f \n",b1,b2);
                    y = x1 + x2;

                    //FloatingPointNumber(x1);
                    //FloatingPointNumber(x2);
                    //FloatingPointNumber(y);
                    stack.push(new MathematicElement(y));
                    k++;

2 个答案:

答案 0 :(得分:0)

你可以像你一样用BigDecimal做到这一点,但是在这个例子中,1(一)可以在基数2(二)上表示,所以计算机保持正确的值= D

答案 1 :(得分:0)

0.4d + 0.6d最终等于1.0d。我相信BigDecimal会将其降低到1d以节省内存。

换句话说,你已经有了答案:)