2013-01-15 57 views
0

下午好真正的價值,如何找到beetween numbersjava

認爲我們有兩個數字,我們要添加他們,但沒有任何四捨五入,我們想獲得真正的價值 所以如果我們增加0,4 +0,6爲double或float java打印結果1但實際上這不是存儲在內存中的實數。 我試圖將它們轉換成BigDecimal,但它也打印結果1! 然而,轉換bigDecimal時,罰款工作罰款時,數字有fran的部分除了0.5!

這是一個方法的一部分,我正在製作一個用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++; 
+3

需要看到代碼.... –

+1

如果你不想舍,不要用雙打。 –

回答

0

你可以用BigDecimal的做到這一點,像你這樣的,但在這個例子中,一(1)可在基地2(兩個來表示),所以電腦擁有完全相同的值= D

+0

你能多一點付出! – user1911078

0

0.4d + 0.6d最終等於1.0d。我相信BigDecimal會將其削減至1d以節省內存。

換句話說,你已經有了答案:)