0

こんにちは、

2 つの数値があり、それらを加算したいが、丸めを行わずに実際の値を取得したいので、0,4+0,6 を加算すると double または float Java は結果 1 を出力するとしますが、実際にはそうではありませんメモリに格納されている実数。それらを BigDecimal に変換しようとしましたが、結果も出力されます 1!! ただし、数値に 0.5 以外の分数部分がある場合、 bigDecimal の変換は正常に機能します。

これはメソッドの一部です netbeans ユーザーを使用して関数電卓を作成しています 数式を文字列として受け取り、それを分離してオブジェクトに値を与えます 数式要素 要素は演算子または数値である可能性があります. 私が投稿するメソッドの一部は、追加する場合のみです

ユーザーが式 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

これは、BigDecimalを使用して行うことができますが、この例では、1(1)を2進数(2)で表すことができるため、コンピューターは正確に値=Dを保持します。

于 2013-01-15T20:16:38.670 に答える
0

0.4d + 0.6d は 1.0d になります。BigDecimal は、メモリを節約するためにこれを 1d に削減すると思います。

言い換えれば、あなたはすでに答えを持っています:)

于 2013-01-15T20:19:49.143 に答える