【问题标题】:Birt Report Indian Rupee formattingBirt 报告印度卢比格式
【发布时间】:2014-05-18 11:43:03
【问题描述】:

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

如果我使用:

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

【问题讨论】:

  • 似乎 BIRT 没有使用正确的“NumberFormat”类来解决这个问题。 BIRT 允许使用“java.text.NumberFormat”来格式化数字,而处理印度格式的类是“com.ibm.icu.text.NumberFormat”。我认为这就是它不起作用的原因。虽然我能够生成预期的格式 1,23,45,678.000,但只能生成字符串格式,而不是数字。如果字符串数据类型适合您的上下文,我可以发布我用作答案的表达式。
  • 你可以发帖,这样它可以帮助别人.. 如果不是我:-).. 毕竟,努力不应该浪费.. 我们如何向 Birt 管理员/社区提出这个问题?

标签: java format report birt number-formatting


【解决方案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{
      "-"
    }
    
  • 在数据集编辑器中单击“预览结果”,应在末尾添加一个具有预期格式的新列。

【讨论】:

【解决方案2】:

您可以通过将语言环境设置为印度设置来使用NumberFormat

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

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

【讨论】:

  • 这是用于 Birt Report 脚本吗?
【解决方案3】:
**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);
 }
 }

【讨论】:

  • 感谢您提供答案伊玛目 - 对于这样的答案 - 您真的应该为关键元素添加一些解释,使其成为问题/问题的解决方案/答案 - 这样社区也将了解您为解决问题所做的工作。
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多