こんにちは、
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++;