JSF f:convertNumber округлить вверх по валюте

Можно ли использовать f:convertNumber для округления? Я проверил API здесь, и ничего не упоминалось о округлении. Если нет, как лучше всего преобразовать значение типа double в значение $ при округлении?

<f:convertNumber maxFractionDigits="2" groupingUsed="true" currencySymbol="$" maxIntegerDigits="7" type="currency" />

Пример: $1,104999 должен стать $ 1,11

3 ответа

Решение

Это работает для моего конкретного случая. Но будут ли у него другие крайние случаи, которые сломаются?

Во-первых, вокруг этого в моем классе Java:

private double roundCost(double cost) {
    return (Math.ceil(cost*100))/100;
}

Тогда мимо этого к моему f:convertNumber.

Я открыт для других предложений.

Вы действительно не должны использовать примитив double в Java при работе с точными числами, такими как денежные суммы; скорее используйте java.lang.BigDecimal или некоторый пользовательский тип денег; почему, см. этот ТАК вопрос.

BigDecimal имеет поддержку нескольких режимов округления; тот, который вы ищете, вероятно, java.math.RoundingMode.UP,

Что касается вопроса о том, как объединить это с af: convertNumber, я сам сейчас разбираюсь с этим.

Можно добавить 0,005 (в вашем случае) перед использованием механизма округления по умолчанию.

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