Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Birt报告印度卢比格式_Java_Format_Report_Birt_Number Formatting - Fatal编程技术网

Java Birt报告印度卢比格式

Java Birt报告印度卢比格式,java,format,report,birt,number-formatting,Java,Format,Report,Birt,Number Formatting,由于某些条件原因,我想通过脚本将数字格式化为基于印度卢比/数字格式,基本上是Birt中的逗号 如果我使用: this.getStyle().numberFormat="#,##,##,##0.000"; 它仍然会在每3个字符后添加逗号。。与12345678.000相同,但我希望此格式中的数字为1,23,45678.000 你能给我一些建议吗 编辑:BIRT引发的错误为:您可以通过将区域设置设置为Indian设置来使用 Locale locale = new Locale("en","IN");

由于某些条件原因,我想通过脚本将数字格式化为基于印度卢比/数字格式,基本上是Birt中的逗号

如果我使用:

this.getStyle().numberFormat="#,##,##,##0.000";
它仍然会在每3个字符后添加逗号。。与12345678.000相同,但我希望此格式中的数字为1,23,45678.000

你能给我一些建议吗

编辑:BIRT引发的错误为:

您可以通过将区域设置设置为Indian设置来使用

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

如果您正在寻找JAVA代码来解决您的问题,就可以使用它。

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

下面是一个可能的解决方法,强制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{
  "-"
}
单击“数据集编辑器”中的“预览结果”,应在末尾添加具有预期格式的新列


这是为Birt报告脚本编写的吗?看来Birt没有使用正确的NumberFormat类来解决这个问题。BIRT允许使用java.text.NumberFormat格式化数字,而处理印度格式的类是com.ibm.icu.text.NumberFormat。我认为这就是它不起作用的原因。虽然我能够生成预期的格式1,2345678.000,但只生成字符串格式,而不是数字。如果字符串数据类型适合您的上下文,我可以发布我用作答案的表达式。您可以发布该表达式,以便对某人有所帮助。。如果不是我:-。。毕竟,努力不应该白费。。我们如何向Birt管理员/社区提出这个问题?谢谢Dominique。。这很酷。我也提出了这个错误:感谢你提供了伊玛目的答案——对于这样的答案——你应该为使这成为问题解决方案/答案的关键要素添加一些解释——这样社区也会理解你为解决这个问题所做的事。
**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);
 }
 }