Java BigDecimal удалить десятичные и конечные числа - PullRequest
18 голосов
/ 23 августа 2009

Я новичок в Java и пытаюсь взять BigDecimal (например, 99999999,99) и преобразовать его в строку, но без десятичного разряда и конечных чисел. Кроме того, я не хочу запятых в числе, и округление не требуется.

Я пробовал:

Math.Truncate(number)

, но BigDecimal не поддерживается.

Есть идеи?

Большое спасибо.

Ответы [ 6 ]

40 голосов
/ 23 августа 2009

Используйте это.

BigDecimal truncated= number.setScale(0,BigDecimal.ROUND_DOWN);
40 голосов
/ 23 августа 2009

Попробуйте number.toBigInteger().toString()

5 голосов
/ 23 августа 2009

BigDecimal без дробей - это BigInteger. Почему бы вам просто не использовать BigInteger?

3 голосов
/ 07 сентября 2015

Вот самый элегантный способ, который я нашел, чтобы решить эту проблему:

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 голосов
/ 24 ноября 2016
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;
}

Обратите внимание: я использовал 'BigDecimal.ROUND_HALF_UP', просто чтобы убедиться, что режим округления округляется до "ближайшего соседа", если оба соседа не равноудалены

0 голосов
/ 30 октября 2012
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); 
}
...