如何将数字转换为单词(iReport)

时间:2010-12-20 01:25:33

标签: jasper-reports

我想转换例如1000到1000(货币)。我怎么能在Jasper中做到这一点?

2 个答案:

答案 0 :(得分:3)

  1. 请参阅http://www.rgagnon.com/javadetails/java-0426.html
  2. 根据给定的实现创建一个类。
  3. 编译该类并将其放在iReport可以读取该文件的目录中。
  4. 更新iReport中的CLASSPATH以指向包含该类的目录(请注意与包命名空间的目录关系)。
  5. 重新启动iReport。
  6. 将文本字段表达式更改为:EnglishNumberToWords.convert( $F{field_name} )
  7. 您必须根据实施细节更改field_nameconvert方法的数据类型。

答案 1 :(得分:1)

Dave回应的另一种选择:

1)如果您的RDBMS支持它(例如HSQLDB),您可以创建一个用户定义的,用户调用的函数,该函数获取字段的数据模型表示并将其转换为表示层表示。例如,数据库在内部将时间戳存储为Modified Julian Day数字(双精度数)。可以使用数据库(SQL / JRT)编写和存储Java函数,以将UTC双精度转换为本地化的时间/日期字符串。

2)编写SQL查询以生成包含报表中所需数据的表。区别在于您在源列上使用用户调用的SQL / JRT函数将其转换为结果表中的表示层表示。

3)使用您的SQL查询(一旦它运行)作为CREATE VIEW(DDL)语句的基础。

4)使用新定义的View作为iReport数据源构建报告。

优点: 无需定制iReports。您创建的视图可以作为任何报告工具的基础,而不仅仅是iReports。

缺点: 这会在您的数据库和JRE之间创建依赖关系,并且(很可能)是您的RDBMS。为了访问用户调用的函数,您需要将函数存储在数据库中,并且需要能够访问JRE才能创建View。有一个SQL / JRT标准,因此您的迁移目标RDBMS可能能够支持它,但肯定无法保证。