将数字格式化为货币并存储为整数

问题描述 投票:1回答:1

我有一个输入字段,用户可以在其中输入以下格式的价格:123.456,78 EUR

<p:inputNumber id="amount" symbol=" EUR" ... />

在备用bean中,该数量必须作为整数处理:12345678

public String addNewPrice(int amount) {
   // processing and sending to backend
}

[当我输入:12,34(= 12欧元和34美分)时,它显然被识别为字符串,而不是整数,并引发异常:

找不到方法:com.proj.ctrl.addNewPrice类(java.lang.String)


当我添加numberConverter时,它似乎一开始就起作用:

<p:inputNumber ...>
   <f:convertNumber minFractionDigits = "2" />
</p:inputNumber>

将数字传递到下一页,我试图在该页面上显示如下:

<p:outputLabel id="amount" ...>
   <f:convertNumber minFractionDigits = "2" />
</p:outputLabel>

但是作为输出,我得到:1.234,00而不是12,34


tl; dr:我试图输入格式为123.456,78的价格,以整数形式存储为12345678,并在下一页上再次显示为123.456,78格式。

这是正确的方法吗?

java jsf primefaces number-formatting
1个回答
0
投票

您可以将价格保存在BigDecimal中,因此在xhtml中可以使用

<p:inputNumber autocomplete="off" id="amount"
        minValue="0" maxValue="999999999999.99" placeholder="0"
        decimalSeparator="," thousandSeparator="."
        decimalPlaces="8" value="#{backingBean.price}">
</p:inputNumber>

然后在backingBean中接收值,如:

private BigDecimal price; 
// ... Getter & Setter

对于输出,您可以使用f:convertNumber

<h:outputText style="font-weight: bold;"
        value="#{backingBean.price}">
    <f:convertNumber type="number" pattern="###.###,##"
        locale="de_DE"/>
</h:outputText>
© www.soinside.com 2019 - 2024. All rights reserved.