下午好,
考虑到我们有两个数字,我们想将它们相加但没有任何舍入,我们希望得到真正的值,所以如果我们添加 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++;