Вопрос округления BigDecimal

1

Я хочу преобразовать 1256.3648 в 126.36 (до 2 знаков после запятой)

Чтобы реализовать эту вещь, я использую .setScale(2, BigDecimal.ROUND_HALF_UP));

Но по некоторым причинам он не работает

Есть идеи?

  • 3
    Вы имеете в виду 126.3648 ? Также BigDecimal является неизменным типом ...
  • 2
    Что именно не работает? Что ты уже пробовал?
Показать ещё 1 комментарий
Теги:

2 ответа

2

Вот тестовая программа, демонстрирующая округление:

import java.math.BigDecimal;

public class Test {
  public static void main(String[] args) {
    BigDecimal x = new BigDecimal("1256.3648");
    BigDecimal y = x.setScale(2,BigDecimal.ROUND_HALF_UP);
    System.out.println(x);
    System.out.println(y);
  }
}

Он выводит:

1256.3648
1256.36

x не изменяется, но результат вызова setScale правильно округлен.

2

Вы можете сделать это таким образом

.setScale(2, RoundingMode.FLOOR);

Предполагая, что вы вызываете его на объект BigDecimal

будет о/р

1256,36

Если ваш вход - 1256.3648

Запомнить,

java.math.BigDecimal.setScale(int newScale, RoundingMode roundingMode) возвращает BigDecimal, масштаб которого является указанным значением, а его немасштабированное значение определяется умножением или делением этого значения без масштабирования BigDecimal на соответствующую мощность 10 для поддержания его общего значения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню