2009-08-22 9 views
15

Jestem nowy w Javie i próbuję pobrać BigDecimal (na przykład 99999999.99) i przekonwertować go na ciąg, ale bez miejsca po przecinku i ciągach liczb. Ponadto nie chcę przecinków w liczbie, a zaokrąglanie nie jest potrzebne.Java BigDecimal usuwa liczby dziesiętne i końcowe

Próbowałem:

Math.Truncate(number) 

ale BigDecimal nie jest obsługiwany.

Wszelkie pomysły?

Dziękuję bardzo.

Odpowiedz

31

Spróbuj number.toBigInteger().toString()

+0

Doskonale, dziękuję. –

34

używać.

BigDecimal truncated= number.setScale(0,BigDecimal.ROUND_DOWN); 
4

BigDecimal bez frakcji to BigInteger. Dlaczego po prostu nie skorzystasz z BigInteger?

0
private void showDoubleNo(double n) { 
    double num = n; 
    int decimalPlace = 2; 
    BigDecimal bd = new BigDecimal(num); 
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP); 
    System.out.println("Point is "+bd); 
} 
2

Oto najbardziej elegancki sposób znalazłem się rozwiązać ten problem:

public static String convertDecimalToString (BigDecimal num){ 
    String ret = null; 
    try { 
     ret = num.toBigIntegerExact().toString(); 
    } catch (ArithmeticException e){ 
     num = num.setScale(2,BigDecimal.ROUND_UP); 
     ret = num.toPlainString(); 
    } 
    return ret; 
} 
0
public static String convertBigDecimalToString(BigDecimal bg) { 
     System.out.println("Big Decimal Value before its convertion :" + bg.setScale(2, BigDecimal.ROUND_HALF_UP)); 

     String bigDecStringValue = bg.setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString(); 

     System.out.println("Big Decimal String Value after removing Decimal places is :" + bigDecStringValue); 

     return bigDecStringValue; 
} 

Uwaga: Użyłem „BigDecimal.ROUND_HALF_UP”, by upewnić się, tryb zaokrąglania zaokrąglić w kierunku "najbliższy sąsiad", chyba że obydwaj sąsiedzi są w równej odległości od siebie.