以印度编号格式显示货币

Mih*_*hir 48 java locale internationalization

我有关于格式化卢比货币(印度卢比 - 印度卢比)的问题.

通常,类似的值450500被格式化并显示为450,500.在印度,相同的值显示为4,50,500

例如,此处的数字表示为:

1
10
100
1,000
10,000
1,00,000
10,00,000
1,00,00,000
10,00,00,000
Run Code Online (Sandbox Code Playgroud)

参考印度编号系统

分隔符在两位数后面,除了最后一组,数千.

我在互联网上搜索过,人们要求使用区域设置en_GB或模式#,##,##,##,##0.00

我通过使用以下标记在JSTL上尝试了这个:

<fmt:formatNumber value="${product.price}" type="currency" 
  pattern="#,##,##,##,###.00"/>
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有解决问题.任何有关此事的帮助将不胜感激.

谢谢

Joa*_*uer 66

不幸的是,DecimalFormat它不支持可变宽度组.因此,它不会完全按照您的要求格式化值:

如果提供具有多个分组字符的模式,则最后一个和整数结尾之间的间隔是使用的间隔.所以"#,##,###,####" == "######,####" == "##,####,####".

Java中大多数数字格式化机制都基于该类,因此继承了这个缺陷.

ICU4J(在Java版本的Unicode的国际组件)提供了一个NumberFormat类,支持此格式:

Format format = com.ibm.icu.text.NumberFormat.getCurrencyInstance(new Locale("en", "in"));
System.out.println(format.format(new BigDecimal("100000000")));
Run Code Online (Sandbox Code Playgroud)

此代码将生成此输出:

Rs 10,00,00,000.00

注意:com.ibm.icu.text.NumberFormat类并没有扩展java.text.NumberFormat类(因为它已延伸的ICU内部基类),它确实然而扩展java.text.Format类,它具有format(Object)方法.

  • 我想用它来使用我的Android应用程序,但令我担心的是Jar文件大小为9MB.我的应用程序目前的大小为2.5 MB,因此添加9 MB似乎有点矫枉过正 (6认同)
  • 我想知道,有多少次问过好旧的forums.sun.com?几乎是每天,不是吗?;) (2认同)

Kir*_*ran 20

使用Android,这对我有用:

new DecimalFormat("##,##,##0").format(amount);
Run Code Online (Sandbox Code Playgroud)

450500格式化为4,50,500

http://developer.android.com/reference/java/text/DecimalFormat.html - DecimalFormat支持两种分组大小 - 主要分组大小,以及一种用于所有其他分组大小.

  • 它给了我"450,501",这不是正确的答案! (3认同)

Cle*_*anX 9

这是你能做的简单的事情,

 float amount = 100000;

 NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "IN"));

 String moneyString = formatter.format(amount);

 System.out.println(moneyString);
Run Code Online (Sandbox Code Playgroud)

输出将为Rs.100,000.00.

  • 但这不是OP想要的.他想要1,00,000 (9认同)

小智 7

尝试这个:

NumberFormat.getCurrencyInstance(new Locale("en","IN")).format(number)
Run Code Online (Sandbox Code Playgroud)

“en”代表英语。“IN”代表国家(印度)。


Aks*_*hat 6

我也遇到了同样的问题.我正在和我一起工作DecimalFormat.

我不知道,JSTL但你可以通过我的解决方案找出一些东西.

因为,分组大小保持不变DecimalFormat.我将两个部分分开,用不同的图案对它们进行格式化并将它们连接起 这是代码.

public static String format(double value) {
    if(value < 1000) {
        return format("###", value);
    } else {
        double hundreds = value % 1000;
        int other = (int) (value / 1000);
        return format(",##", other) + ',' + format("000", hundreds);
    }
}

private static String format(String pattern, Object value) {
    return new DecimalFormat(pattern).format(value);
}
Run Code Online (Sandbox Code Playgroud)

它将提供印度编号系统等格式.

如果你想要小数点,只需添加".##"两个条件.

"###""###.##""000""000.##".

  • 此代码有一个巨大的错误。如果输入1999.95,它将被格式化为1,1000 (2认同)

Nis*_*hah 5

在此处输入图片说明

只需复制过去此功能。:)

  public static String rupeeFormat(String value){
            value=value.replace(",","");
            char lastDigit=value.charAt(value.length()-1);
            String result = "";
            int len = value.length()-1;
            int nDigits = 0;

            for (int i = len - 1; i >= 0; i--)
            {
                result = value.charAt(i) + result;
                nDigits++;
                if (((nDigits % 2) == 0) && (i > 0))
                {
                    result = "," + result;
                }
            }
            return (result+lastDigit);
        }
Run Code Online (Sandbox Code Playgroud)


Pal*_*hul 5

public String getIndianCurrencyFormat(String amount) {
    StringBuilder stringBuilder = new StringBuilder();
    char amountArray[] = amount.toCharArray();
    int a = 0, b = 0;
    for (int i = amountArray.length - 1; i >= 0; i--) {
        if (a < 3) {
            stringBuilder.append(amountArray[i]);
            a++;
        } else if (b < 2) {
            if (b == 0) {
                stringBuilder.append(",");
                stringBuilder.append(amountArray[i]);
                b++;
            } else {
                stringBuilder.append(amountArray[i]);
                b = 0;
            }
        }
    }
    return stringBuilder.reverse().toString();
}
Run Code Online (Sandbox Code Playgroud)

这就是我所做的,以获得印度货币格式。如果输入是 1234567890 意味着输出是 1,23,45,67,890。