0

下午好,

考虑到我们有两个数字,我们想将它们相加但没有任何舍入,我们希望得到真正的值,所以如果我们添加 0,4+0,6 要么是 double 要么 float java 打印结果 1 但实际上这不是存储在内存中的实数。我试图将它们转换为 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++;
4

2 回答 2

0

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

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

于 2013-01-15T20:19:49.143 回答
0

您可以使用 BigDecimal 来执行此操作,就像您所做的那样,但在此示例中,1(一)可以以 2(二)为底表示,因此计算机拥有精确的值 =D

于 2013-01-15T20:16:38.670 回答