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