我想通过脚本编写基于印度卢比/数字格式(基本上是逗号)的数字格式化(出于某些条件原因)。
如果我使用:
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
答案 0 :(得分:1)
编辑:设置自定义格式编号
这是一种可能的解决方法,强制BIRT使用com.ibm.icu.text.DecimalFormat类。我不知道为什么印度语格式本身不受支持,你可以在eclipse.org网站的bugzilla中报告这个。
输入表达式:(在第一行中,将“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);
}
}