Birt报告印度卢比格式

时间:2014-04-06 09:02:26

标签: java format report birt number-formatting

我想通过脚本编写基于印度卢比/数字格式(基本上是逗号)的数字格式化(出于某些条件原因)。

如果我使用:

this.getStyle().numberFormat="#,##,##,##0.000";

它仍然在每3个字符后添加逗号..如12,345,678.000但我希望这个格式的数字是1,23,45,678.000

你能告诉你吗

编辑:将BIRT引发的错误提升为:https://bugs.eclipse.org/bugs/show_bug.cgi?id=432211

3 个答案:

答案 0 :(得分:1)

编辑:设置自定义格式编号

这是一种可能的解决方法,强制BIRT使用com.ibm.icu.text.DecimalFormat类。我不知道为什么印度语格式本身不受支持,你可以在eclipse.org网站的bugzilla中报告这个。

  • 编辑数据集
  • 创建一个新的计算列,选择“String”数据类型
  • 输入表达式:(在第一行中,将“value”替换为包含值的数字列的实际名称)

    var columnvalue=row["value"], customformat="#,##,##,##0.000"; //we can add here a test for conditional formatting
    if (columnvalue!=null){
      var symbols=Packages.com.ibm.icu.text.DecimalFormatSymbols(new Packages.java.util.Locale("en","IN"));
      var formatter=Packages.com.ibm.icu.text.DecimalFormat(customformat,symbols);
      var value=new Packages.java.math.BigDecimal(columnvalue.toString());
    formatter.format(value);
    }else{
      "-"
    }
    
  • 点击数据集编辑器中的“预览结果”,最后应添加一个具有预期格式的新列。

答案 1 :(得分:0)

您可以通过将区域设置设置为印度设置来使用NumberFormat

Locale locale = new Locale("en","IN");
String str = NumberFormat.getNumberInstance(locale).format(<your number>);

如果您正在寻找JAVA代码来解决您的问题。

答案 2 :(得分:0)

**you can use following javascript currency format and call it from BIRT.

function getSouthAsianCurrencyFormat(amount) 
{
var l,ftemp,temp,camount,k,adecimal;
var decimals=2;
var ptrn="##,##,###,##,##,###.##";
var ptrnLength=0;
var adecimal=0;
var counts = {};
var ch, index, len, count;
amount= Number(Math.round(amount+'e'+decimals)+'e-'+decimals);
amount=amount.toFixed( decimals );
for (index = 0, len = ptrn.length; index < len; ++index) {
ch = ptrn.charAt(index); 
count = counts[ch];
counts[ch] = count ? count + 1 : 1;
}
for (ch in counts) {
if(ch=="#"){
ptrnLength=counts[ch];
console.log(ch + " count: " + ptrnLength+"("+ptrn.length+")");
console.log( "amount length: " + amount.toString().length);
//console.log("decimalLength: "+decimalLength.toString().length);
}
}
if(counts['.']=0){
amount=amount+".00";
}

k=ptrn.toString().length;
l=amount.toString().length;
 ftemp=amount.toString();
 temp="";
 camount="";
 if(ptrnLength<(amount.toString().length-1)) return 0;
 else {
        k=k-1;
        l=l-1;
        for(i=l;i>-1;i--){
        if(ptrn.charAt(k)=="#" || ptrn.charAt(k)=="." ){
        camount=ftemp.charAt(i)+camount;            
        }
        else{
        camount=ptrn.charAt(k)+camount;
        k=k-1;
        if(ptrn.charAt(k)=="#"){
        camount=ftemp.charAt(i)+camount;
        }   
        }
        k=k-1;
     }   
     return (camount);
 }
 }