Birt 报告中的数字格式为小数

Posted

技术标签:

【中文标题】Birt 报告中的数字格式为小数【英文标题】:Number format a decimal in Birt reports 【发布时间】:2014-05-16 20:22:21 【问题描述】:

我有一个表格,它以数字和十进制(重量-公斤)为单位提供值 例如 10.455 公斤(即 10 公斤和 455 克) 和没有。如 10 号。

现在所有这些值都来自表中的一列 (Decimal (10,3)-mysql),并且基于 unittype 列,我必须决定在 BIRT 报告中是小数点后 3 位还是小数点零位。

我知道通过脚本可以修改值。但我无法使用脚本。

我正在 onFetch 上写这篇文章

if(row["unittype"]=="Nos")
var df = new Packages.java.text.DecimalFormat("#,###.##");
else
var df = new Packages.java.text.DecimalFormat("#,###");

df.format(row["invoicedquantity"]);
this.setDisplayValue(df);

我无法获取值

【问题讨论】:

报告渲染后使用此脚本时可见什么? 输出没有变化 【参考方案1】:

我不相信这可以在 onFetch 脚本中起作用,这种脚本应该放在数据元素的“onRender”事件中。此外,格式化程序返回的结果应该是:

this.setDisplayValue(df.format(row["invoicedquantity"]));

但我认为在数据集中创建一个计算列作为数据类型“字符串”会更容易,使用表达式:

if(row["unittype"]=="Nos")
  Formatter.format(row["invoicedquantity"],"#,###.## Kg");
else
  Formatter.format(row["invoicedquantity"],"#,### Kg");

编辑: 在深入研究之后,我找到了一种更合适的方法,通过更改“numberformat”属性。在数据元素(应该是 number 数据类型)的 onRender 或 onCreate 脚本中,我们可以执行以下操作:

if(row["unittype"]=="Nos")
  this.getStyle().numberFormat="#,###.## Kg";
else
  this.getStyle().numberFormat="#,### Kg";

这是一种更好的方法,因为数据元素仍然具有数字数据类型,因此如果将报表导出到 excel 中,它将被 excel 识别为数字。

【讨论】:

感谢 Dominique 的回复,但 InvoiceQuantity 和 unittype 多次从表中出现(因为发票中有多个行项目)并且当我在该列的 onRender 上添加上述 if-else 脚本时,它不会改变/影响值..我错过了什么吗?我正在申请我必须格式化的数据元素的 onRNder Dominique .. 这太棒了.. 它运行顺利.. 你能帮我把它格式化为一个印度数字,它是 (#,##,##,##0.00).. . 我无法为这个号码设置。 Birt 在每 3 个数字后添加逗号。提前致谢!!【参考方案2】:

最简单的方法是使用固定小数的数字格式,

选择字段 转到:属性编辑器 -> 数字格式

选择货币并进行相应更改。

【讨论】:

以上是关于Birt 报告中的数字格式为小数的主要内容,如果未能解决你的问题,请参考以下文章

BIRT 报告 - 如何安排它们并通过电子邮件发送?

如何为 Google 表格中单列中的每个值设置数字格式取决于值?

LabelHandle 上的 canShrink 属性不适用于使用 BIRT 的 PDF 和 EXCEL 报告

DecimalFormat(数字格式)

使用 BIRT,如何确保行中的背景颜色在行中的每个单元格中具有相同的高度?

格式化数字 - Java 中的小数位数字分组