java - 将数字格式化为货币并存储为整数
问题描述
我有一个输入字段,用户可以在其中输入以下格式的价格: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)
当我添加 anumberConverter
时,它似乎一开始就起作用:
<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
。
这是正确的方法吗?
解决方案
您可以将价格保存为 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>
推荐阅读
- java - 获取 SWT 视图的大小
- google-data-studio - Google Data Studio 地理地图缩放区域的无效字段
- php - Laravel - 如何将项目从 zip 添加到供应商并使用它?
- postgresql - 限制 db 用户对谷歌云 sql 的权限
- git - 压扁的功能分支通过源树作为开发分支的一部分出现
- php - 在 Red Hat Linux 6 上使用 PHP odbc 连接到 Teradata 数据库时出错
- google-apps-script - 使用脚本将 csv 文件导入谷歌表格
- python - 以python方式基于平台更改函数的行为
- node.js - NodeJS:错误:找不到模块'ytdl-core'
- ruby-on-rails - 用太阳黑子索引 jsonb 字段