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 报告中的数字格式为小数的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Google 表格中单列中的每个值设置数字格式取决于值?
LabelHandle 上的 canShrink 属性不适用于使用 BIRT 的 PDF 和 EXCEL 报告