`
yunchow
  • 浏览: 325289 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在报表中格式化货币

阅读更多
最近在用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);
	}

}








0
0
分享到:
评论

相关推荐

    javascript数字格式化为货币字符,数字格式化为大写货币

    在JavaScript中,对数字进行货币格式化的处理是非常常见的需求,尤其是在财务或电子商务相关的应用程序中。以下是对给定代码片段的深入解析和知识点总结。 #### 标准货币格式化函数 `formatCurrency` 此函数实现了...

    采用js实现具有复杂字符串的格式化操作类库函数

    这个库尤其适合在需要频繁拼接和格式化字符串的情况下使用,避免了JavaScript原生字符串操作中的性能问题。 在JavaScript中,原生的字符串是不可变的,这意味着每次修改字符串都会创建一个新的字符串对象,这在处理...

    Delphi格式化数字金额..rar

    在Delphi编程环境中,处理数字金额的格式化是一项常见的任务,尤其在财务软件或报表系统中更为重要。本文将深入探讨如何在Delphi中对数字金额进行格式化,使其符合中国的货币显示规则,例如添加逗号分隔符、人民币...

    CString.Format格式化输出

    CString.Format格式化输出是C#语言中的一种常用的字符串格式化输出方式。它可以将数值、日期、时间等信息按照指定的格式进行输出,常用于报表、日志、数据导出等场景。 CString.Format格式化输出可以将数值、日期、...

    (六)Ireport制作一个规范的报表,处理数据格式

    例如,你可以使用`$F{字段名}.format("yyyy-MM-dd")`来格式化日期字段,`new DecimalFormat("#,###.00").format($F{金额})`来格式化货币字段,使其看起来更加专业。 标签中提到的"源码"和"工具",暗示了我们可能...

    js字符串转货币格式及金额小写转大写

    这段代码会在用户输入时更新显示的格式化货币和大写金额。 综上所述,处理JavaScript中的货币格式化和金额转换涉及到字符串操作、正则表达式、自定义函数以及DOM操作等多个方面。通过这些方法,我们可以确保在前端...

    数字格式化工具类

    标题中的“数字格式化工具类”指的是在编程中用于处理数字字符串的一种实用程序类,它通常包含各种方法,用于将数字转换成特定格式,如货币、百分比、科学记数法等。这样的工具类可以极大地简化开发过程,提高代码...

    jquery格式化大写金额组件

    **jQuery格式化大写金额组件**是一个用于将数字金额转换为中文大写的JavaScript插件,广泛应用于财务报表、发票和银行系统中。该组件提供了一种标准且方便的方式来处理金融数据的显示,确保了在前端界面中金额的正确...

    如何在水晶报表中添加合计字段源程序实例,C#.net源代码编写,

    如果需要,可以通过格式化总计字段的属性来改变其显示方式,如添加货币符号、设置小数位数等。 4. **编写C#.NET源代码**: 在VS.NET中,为报表创建一个C#类作为数据绑定源。这个类通常包含属性,每个属性对应报表...

    CString.Format格式化输出和ToString()的一些常用用法.pdf

    7. 格式化时可以指定小数点后的位数,例如在货币格式化中"0.00"表示显示两位小数。 8. 可以使用负数索引来表示从后往前数的参数位置,如"{-1}"表示最后一个参数。 9. 当使用ToString()方法进行格式化时,可以指定...

    财务报表标准格式-.doc

    综上所述,财务报表标准格式为企业提供了标准化的财务信息披露框架,使得利益相关者能够清晰地理解企业的财务状况,做出明智的决策。企业必须严格按照这些标准编制和披露财务信息,确保信息的准确性和完整性。

    JS自动格式化输入的数字/千位分隔符.rar

    在这个例子中,每当用户在`<input>`字段中输入时,`addThousandSeparators`函数会被调用,将输入值格式化后再显示出来。 标签“JS特效-表单按钮”可能意味着这个代码还包含与表单按钮交互的逻辑,比如在用户点击...

    Visual Foxpro 报表文件语言转换工

    报表文件在Visual FoxPro中扮演着重要的角色,它们用于呈现和格式化数据,使得数据分析和决策制定更为便捷。"Visual Foxpro 报表文件语言转换工"可能是指一个工具或程序,专门用于处理和转换Visual FoxPro报表文件的...

    vc 报表类库

    同时,它们也支持数据格式化,如日期、货币、百分比等。 4. **交互性**:高级的报表类库会提供交互式功能,如排序、筛选、钻取(drill-down)等,让用户能够在报表上直接进行操作。 5. **打印和导出**:报表可以被...

    java动态报表神器DynamicReports中文文档

    在Java开发领域中,报表的制作是一个经常遇到的需求。DynamicReports是一个开源的Java报表工具,可以让开发者快速简便地生成各种复杂的报表。它基于强大的iReport JasperReports引擎,通过Java API实现了报表的动态...

    Pb报表设计、自定义报表

    在PB11.5编程环境中,用户可以利用其强大的报表工具来构建复杂的数据展示,从而提高数据分析的效率和用户体验。 一、PB报表设计基础 PB报表设计主要依赖于DataWindow对象,这是PB的一个核心特性,用于显示和操作...

    Java Web报表模块.rar

    在Java Web环境中,报表通常涉及到数据库查询、数据处理以及格式化输出等多个环节,涉及的技术点广泛且深入。以下是一些关于Java Web报表模块的关键知识点: 1. **Servlet与JSP**:作为Java Web开发的基础,Servlet...

    SAP B1水晶报表使用指南

    - **后续章节:** 预计会详细介绍如何在BusinessObjects Enterprise资源库中创建、编辑、发布和管理Crystal Reports报表的具体操作。 通过以上详述,我们可以看到Crystal Reports 2008 SP3 不仅提供了丰富的功能和...

    WEBI报表2常见问题及解决方法总结

    在WEBI中,数据的格式化呈现对提升报表质量至关重要。使用`stringFormatNumber`函数可以对数值进行格式化处理,使其更符合用户的阅读习惯。例如,在显示货币金额时,可以设定特定的数字格式,以便于用户直观地理解...

Global site tag (gtag.js) - Google Analytics