Как использовать pe:inputNumber с BigDecimal

Какой правильный / лучший способ использовать pe:inputNumber для точных больших десятичных знаков? Я должен принять ввод валюты, который может иметь до 4 десятичных знаков и не должен быть округлен. Прямо сейчас я делаю следующее:

public void withdraw(Number amount) {
 BigDecimal d = new BigDecimal(amount.doubleValue());
 // process 
}

а также

<pe:inputNumber roundMethod="S" decimalPlaces="4" symbol="#{applicationBean.currentCurrencySymbol}" required="true" value="#{flowScope.Amount}"/>

<p:commandButton value="Proceed" type="submit" ajax="true" actionListener="#{myBean.withdraw(flowScope.Amount)}"
</p:commandButton>

Меня беспокоит то, что значение внутренне преобразуется в Double с помощью inputNumber, что может привести к ошибкам округления при преобразовании его в BigDecimal.

1 ответ

Расширения PrimeFaces InputNumberбыл перемещен в PrimeFaces некоторое время назад. Источник визуализатора открыт. Там вы обнаружите, что отправленные значения напрямую используются для создания экземпляра :

      BigDecimal value = new BigDecimal(submittedValue);

См. Также витрину для примера с примером с BigDecimal: https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml

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