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

Sau*_*hal 6 java mysql format birt report

我有一张桌子,它给出了Nos.和Decimal(重量 - kg)Eg10.455 Kg(即10 Kg和455 gms)和nos的值.如10号

现在所有这些值都来自表中的一列(十进制(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);
Run Code Online (Sandbox Code Playgroud)

我无法得到这些价值观

Dom*_*que 7

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

this.setDisplayValue(df.format(row["invoicedquantity"]));
Run Code Online (Sandbox Code Playgroud)

但我认为在数据集中使用表达式创建计算列作为数据类型"String"会更容易:

if(row["unittype"]=="Nos"){
  Formatter.format(row["invoicedquantity"],"#,###.## Kg");
}else{
  Formatter.format(row["invoicedquantity"],"#,### Kg");
}
Run Code Online (Sandbox Code Playgroud)

编辑: 经过深入研究,我发现了一种更合适的方法,即改变"numberformat"属性.在数据元素的onRender或onCreate脚本(应该是数字数据类型)中,我们可以执行以下操作:

if(row["unittype"]=="Nos"){
  this.getStyle().numberFormat="#,###.## Kg";
}else{
  this.getStyle().numberFormat="#,### Kg";
}
Run Code Online (Sandbox Code Playgroud)

这是一种更好的方法,因为数据元素仍然具有数值数据类型,因此如果报告在excel中导出,则excel会将其识别为数字.