发票管理软件PDF价格格式化:保留Double数值两位小数
发票价格保留两位小数的代码修改方案
问题描述
现有发票管理软件生成PDF时,产品价格会原样显示所有输入的小数位(如输入12,36789 €,PDF显示12,36789 €),需要修改代码让价格始终仅显示前两位小数,期望显示为12,36 €。当前控制价格显示的代码为:
$V{Formatter}.format(new Double($F{importoUnitario}.replaceAll(",",".")))+" "+$P{valutaSimbolo}
修改方案
方案1:调整全局Formatter的格式模式
如果$V{Formatter}是项目中预定义的格式化对象,直接修改它的格式规则为保留两位小数。例如将Formatter初始化代码改为:
$V{Formatter} = new DecimalFormat("#0.00"); // 若需适配逗号作为小数分隔符的地区,可指定对应Locale $V{Formatter} = DecimalFormat.getNumberInstance(Locale.GERMANY); // 示例,根据实际地区调整 ((DecimalFormat)$V{Formatter}).applyPattern("#0.00");
修改后原代码无需改动,Formatter会自动将数值格式化为两位小数。
方案2:直接在代码中指定小数位格式化
如果不想修改全局Formatter,可直接替换原代码中格式化数值的部分,使用DecimalFormat强制保留两位小数,同时适配逗号小数分隔符:
new DecimalFormat("#0.00").format(new Double($F{importoUnitario}.replaceAll(",","."))).replace(".",",") + " " + $P{valutaSimbolo}
代码说明:
$F{importoUnitario}.replaceAll(",","."):将输入的逗号小数分隔符转为点,符合Double类型的解析要求new DecimalFormat("#0.00").format(...):将数值格式化为保留两位小数的字符串(默认用点做小数分隔符).replace(".",","):将格式化后的点换回逗号,匹配用户地区的显示习惯- 后续拼接空格和货币符号的逻辑保持不变
验证效果
修改后,输入12,36789时,会被格式化为12,36,最终显示为12,36 €,满足需求。
内容的提问来源于stack exchange,提问作者Gianluca
相关产品推荐
相关产品推荐

