如何在Jasper Report中显示带印度卢比符号及两位小数的金额
解决Jasper Report印度卢比格式显示问题
方案1:在Jasper模板中直接配置格式(推荐)
报表格式逻辑交给模板控制更合理,步骤如下:
- 在Jasper模板里,选中金额对应的文本字段,设置文本字段表达式为
$F{totalAmount}(确保字段为数据库查询出的numeric类型) - 打开该文本字段的属性面板,找到格式模式(Pattern),输入
¤ #,##0.00:¤会根据Locale自动替换为对应货币符号#,##0.00确保保留两位小数并添加千位分隔符
- 后端填充报表时传入印度Locale:
也可以直接在模板的报表属性中设置Locale为JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, connection, new JRParameter[]{JRParameter.REPORT_LOCALE, new Locale("en", "IN")} );en_IN,让模板默认使用印度区域格式。
方案2:自定义DecimalFormat硬编码卢比符号
如果不想依赖Locale配置,直接构造带₹的格式化字符串:
import java.text.DecimalFormat; // 自定义格式:卢比符号 + 千位分隔 + 两位小数 DecimalFormat rupeeFormat = new DecimalFormat("₹ #,##0.00"); parameters.put("TotalAmount", rupeeFormat.format(requestfortieuphotels.getTotalAmount()));
这种方式直接指定符号,不会出现"Rs"替代₹的问题。
补充:解决数据库numeric显示一位小数的问题
数据库中numeric类型需指定精度和小数位数,例如修改金额列定义:
ALTER TABLE your_table ALTER COLUMN total_amount TYPE numeric(12, 2);
这样存储和查询时都会保留两位小数,避免后续处理出现单小数位的情况。
内容的提问来源于stack exchange,提问作者Prabhanshu
相关产品推荐
相关产品推荐

