У меня есть проект, в котором мне нужно отформатировать числа перед их печатью. Я так делаю:
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. Мое число автоматически округляется до ближайшего десятичного знака. Однако я не всегда хочу иметь такое поведение. Как с этим классом округлить числа по своему желанию?
Спасибо




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))