最近在用FineReport这个工具进行系统的报表开发,发现在导出报表时要求按币别和精度要求动态的格式化金额显示,工具本身不支持这项功能,最后经过研究发现了通过条件属性加上自定义函数的方式可以完美解决该问题,代码如下:
package com.xxx.report.function;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.fr.base.FRContext;
import com.fr.report.script.NormalFunction;
/**
* 格式化货币, 为货币加上前缀并且保留合适的小数位,并对末位进行四舍五入处理
*/
public class CcyRender extends NormalFunction {
private static final long serialVersionUID = 1L;
/**
* params[0]: 需要格式化的货币值
* params[1]: 货币前缀
* params[2]: 货币精度
* @see com.fr.report.script.Function#run(java.lang.Object[])
*/
public Object run(Object[] params) {
String target = "0.00d"; // 目标值
String prefix = "¥"; // 前缀
int scale = 2; // 精度
try {
target = String.valueOf(params[0]);
prefix = String.valueOf("" + params[1]);
scale = Integer.valueOf("" + params[2]);
} catch (Exception ex) {
// ignore the exception, return;
FRContext.getLogger().log(Level.WARNING, ex.getMessage(), ex);
}
// 对小数位进行四舍五入
try {
BigDecimal d = new BigDecimal(target).setScale(scale, RoundingMode.HALF_UP);
target = String.valueOf(d);
} catch (Exception ex) {
// ignore
FRContext.getLogger().log(Level.WARNING, ex.getMessage(), ex);
}
FRContext.getLogger().log(Level.INFO, " --> " + target);
final String regex = "^([^\\.]*\\d+)(\\d{3}.*)$"; // 每3位数字用逗号分隔
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(target);
while (m.find()) {
target = m.group(1) + "," + m.group(2);
m = p.matcher(target);
}
String res;
if (target.charAt(0) == '-') {
res = '-' + prefix + target.substring(1);
} else {
res = prefix + target;
}
return res;
}
public static void main(String[] args) {
Object res = new CcyRender().run(new Object[]{"11232213213216789.1235", "$", 3});
System.out.println(res);
}
}
分享到:
相关推荐
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时,...
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时,...
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时,...
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时,...
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时,...
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时,...
格式化单元格:按常规、数值、货币、会计、日期、时间、百分比、分数、科学计数等格式化单元格文字; 垂直、横向排列文字; 合并、拆开单元格; 打印页眉、页脚动态设置、缩放打印、按列(行)打印; 支持...
7.对创建的报表支持包括xls、txt、csv、xml等多种导出文件格式, 同时支持资源本地化。 8 支持单元格公式运算。公式表达式中可以进行算术、关系、逻辑等各种运算,支持对参数、变量、字段及单元格的引用。 同时...
第3章 格式化财务表格 3.1 设置单元格格式 58 3.1.1 设置单元格字体格式 58 3.1.2 设置单元格数字格式 60 3.2 使用单元格样式 63 3.2.1 套用单元格样式 63 3.2.2 新建单元格样式 64 3.3 套用表格格式 67 3.3.1 使用...
98 <br>0153 如何自定义数字小数点左边分组位数 98 <br>0154 格式化输入数据为货币格式 99 <br>0155 如何计算两个整数的乘积 99 <br>0156 如何将二进制数转换为十进制数 100 <br>0157 如何...
方便的Word和Excel接口:提供与Word和Excel的访问接口,通过Word模板和Excel模板定义,来生成一些指定的报表格式文件。实现如公文、发票、信封等格式文件的套打功能。 强大的数据导出:支持数据到Word、Excel、文本...
幻灯片模板封面,使用了金色城市建筑、立体货币符号、金色地球等作为背景图片。左侧使用四个微立体六边形填写幻灯片年份,下方填写理财投资PPT标题。界面设计风格与金融主体搭配。 PowerPoint模板内容页,由21张...
☆ 支持外币核算,默认记账货币:人民币,可按实际要求调整; ☆ 现金日记账输入格式、内容可按实际情况设置; ☆ 银行日记账输入格式、内容可按实际情况设置; ☆ 全部查询和报表可按实际要求进行调整; ☆ 操作...
E-data分为设计端和运行端,设计端可以让用户在熟悉的类EXCEL环境下通过表单模型+流程模型+报表模型的设计,来实现按需定制符合自身业务的信息化管理系统,轻松实现信息化管理。运行端采用B/S架构,可以把设计端设计...
该平台分为设计端和运行端,设计端可以让用户在熟悉的类EXCEL环境下通过表单模型+流程模型+报表模型的设计,来实现按需定制符合自身业务的信息化管理系统,轻松实现信息化管理。运行端采用B/S架构,可以把设计端设计...
E-data采用.Net技术开发,分为设计端和运行端,设计端可以让用户在熟悉的类EXCEL环境下通过表单模型 流程模型 报表模型的设计,来实现按需定制符合自身业务的信息化管理系统,轻松实现信息化管理。运行端采用B/S架构...
实例250 使用格式化函数转换查询条件的数据类型 385 实例251 在查询中使用字符串函数 387 实例252 在查询中使用日期函数 388 8.19 having语句应用 390 实例253 利用having语句过滤分组数据 390 ...
6.4报表格式设置 37 6.5取数公式设置 38 6.5.1帐上取数函数 39 6.5.2表内表间取数函数 40 第七章 期末帐务 43 7.1期末汇率调整 43 7.2结帐凭证编制 43 7.3期末结帐 44 第三篇 工资管理系统 45 第八章 系统概述 45 ...
4. 新增了小数字段支持显示数字、百分比、货币格式的功能 5. 新增了文本字段、引用字段支持启用扫码功能 6. 新增了数据列表导出支持 CSV、Excel、报表模板三种格式的功能 7. 优化了全局搜索和新建样式 8. 进行了 25+...