Java: удаление нулей после десятичной точки в BigDecimal

У меня есть такая программа,

BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1= new BigDecimal(0.000);

bd = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();

System.out.println("bd value::"+ bd);
System.out.println("bd1 value::"+ bd1);

Я получаю следующий вывод: 23.09 для bd и 0.00 для bd1, но я хочу bd1 как 0 не как 0.00. Я правильно применяю методы?

Ответ 1

BigDecimal bd  = new BigDecimal(23.086); 
BigDecimal bd1 = new BigDecimal(0.000);

bd  = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros(); 
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();

System.out.println("bd value::"+ bd); System.out.println("bd1 value::"+ bd1);
System.out.println("new way:" + bd1.intValueExact());

//ВЫВОД Значение bd:: 23.09

Значение bd1:: 0.00

новый способ: 0

Ответ 2

попробуйте это

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class calculator{
    public static void main(String[] args) {
        BigDecimal bd = new BigDecimal(23.086);
        BigDecimal bd1= new BigDecimal(0.000);    
        DecimalFormat df = new DecimalFormat("0.##");    
        System.out.println("bd value::"+ df.format(bd));
        System.out.println("bd1 value::"+ df.format(bd1));

    }

}

Ответ 3

Простой, чистый, гибкий, простой-2-понять и поддерживать код

(будет работать и для double)

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2); //Sets the maximum number of digits after the decimal point
df.setMinimumFractionDigits(0); //Sets the minimum number of digits after the decimal point
df.setGroupingUsed(false); //If false thousands separator such ad 1,000 wont work so it will display 1000

String result = df.format(bd);
System.out.println(result);

Ответ 4

Вы можете использовать printf() - спецификатор %f работает и для BigDecimal:

System.out.printf("bd1 value::%.0f%n", bd1);
bd1 value::0

Ответ 5

Вы можете сделать это

System.out.println("bd value: " + ((bd.scale() == 0) ? bd.unscaledValue() : bd));

Ответ 6

Этот метод ниже работает лучше IMO

    bd1 = bd1.stripTrailingZeros();
    System.out.println(bd1.toPlainString());

Отпечатки:

    0

Если bd1 = 1.2300, это напечатает

    1.23