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 (в вашем случае) перед использованием механизма округления по умолчанию.