2014-04-15 68 views
0

我學習BigDecimal和我希望它恢復我進入確切的數字,下面的代碼是圓棒的數量,我不知道爲什麼的Java的BigDecimal舍入

public static BigDecimal parseFromNumberString(String numberString) { 

    if (numberString != null) { 

     String nonSpacedString = 
      numberString.replaceAll("[ \\t\\n\\x0B\\f\\r]", "").replaceAll("%", ""); 

     int indexOfComma = nonSpacedString.indexOf(','); 
     int indexOfDot = nonSpacedString.indexOf('.'); 
     NumberFormat format = null; 

     if (indexOfComma < indexOfDot) { 
      nonSpacedString = nonSpacedString.replaceAll("[,]", ""); 
      format = new DecimalFormat("##.#"); 
     } else if (indexOfComma > indexOfDot) { 
      nonSpacedString = nonSpacedString.replaceAll("[.]", "");  
      DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(); 
      otherSymbols.setDecimalSeparator(','); 
      format = new DecimalFormat("##,#", otherSymbols); 
     } else { 
      format = new DecimalFormat(); 
     } 
     try { 
      return new BigDecimal(format.parse(nonSpacedString).doubleValue(), new MathContext(12)); 
     } catch (ParseException e) { 
      // unrecognized number format 
      return null; 
     } 
    } 
    return null; 
} 

如果我這樣做

public static void main(String[] args){ 
    BigDecimal d = Test.parseFromNumberString("0.39"); 
    System.out.println(d); 
} 

打印的值是0,00而不是0.39

+0

我得到'0.39000000' ... – Nivas

+0

我剛剛運行您的代碼,我得到了。 '0.390000000000'也許你忘了保存? – Dima

回答

0

我剛剛運行了您的代碼,然後得到。 0.390000000000也許你忘了保存?

嘗試清理您的項目,重新啓動您的IDE並重新編譯。代碼應該做工精細

+0

我只知道,如果我運行0,39。如果我運行0.39,數字變成四捨五入 –

1

試試這個代碼:

public static BigDecimal parseFromNumberString(String numberString) { 

    if (numberString != null) { 

     String nonSpacedString = 
      numberString.replaceAll("[ \\t\\n\\x0B\\f\\r]", "").replaceAll("%", ""); 

     int indexOfComma = nonSpacedString.indexOf(','); 
     int indexOfDot = nonSpacedString.indexOf('.'); 
     DecimalFormat decimalFormat = new DecimalFormat(); 
     DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
     String pattern = "#0.0#";   

     if (indexOfComma < indexOfDot) { 
      symbols.setDecimalSeparator('.'); 
     } else if (indexOfComma > indexOfDot) { 
      symbols.setDecimalSeparator(','); 
     } 

     try { 
      decimalFormat = new DecimalFormat(pattern, symbols); 
      decimalFormat.setParseBigDecimal(true); 
      BigDecimal toRet = (BigDecimal) decimalFormat.parse(nonSpacedString); 
      return toRet.setScale(12); 
     } catch (ParseException e) { 
      return null; 
     } 
    } 
    return null; 
} 

public static void main(String... args) { 
    BigDecimal d = Test.parseFromNumberString("0,39"); 
    System.out.println(d); 
} 

這就是你想要什麼?