GWT - Режим округления с NumberFormat из com.google.gwt.i18n.client.NumberFormat

У меня есть проект, в котором мне нужно отформатировать числа перед их печатью. Я так делаю:

public String formatNumber(String format, long number, RoundingMode roundingMode) {
    DecimalFormat df = new DecimalFormat(format);
    df.setRoundingMode(roundingMode);
    return df.format(number);
}

Но мое приложение должно использовать GWT, и я больше не могу использовать DecimalFormat, потому что он не поддерживается. Мне нужно использовать NumberFormat из пакета com.google.gwt.i18n.client.NumberFormat;.

Я форматирую свои числа так:

public String formatNumber(String format, long number, RoundingMode roundingMode) {
     NumberFormat df = NumberFormat.getFormat(format);
     return df.format(number);
 }

Как видите, df.setRoundingMode не существует в NumberFormat. Мое число автоматически округляется до ближайшего десятичного знака. Однако я не всегда хочу иметь такое поведение. Как с этим классом округлить числа по своему желанию?

Спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
268
2

Ответы 2

GWT NumberFormat не поддерживает режимы округления. НО, вы форматируете long, поэтому похоже, что вам все равно не нужно округлять. Если вам это действительно нужно, значит, у вас есть float, double, BigDecimal и т.д. Я рекомендую вам использовать BigDecimal и изменить масштаб перед вызовом форматтера.

NumberFormat.getDecimalFormat().format(new BigDecimal(1.123).setScale(2, RoundingMode.HALF_EVEN));

Или просто...

String str = new BigDecimal(1.123).setScale(2, RoundingMode.HALF_EVEN).toPlainString();

Вы можете взглянуть на Math.rint() и Math.round()Увидеть разницу

Затем вы вернете Math.rint(df.format(number))

Другие вопросы по теме