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)方法.
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支持两种分组大小 - 主要分组大小,以及一种用于所有其他分组大小.
这是你能做的简单的事情,
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.
小智 7
尝试这个:
NumberFormat.getCurrencyInstance(new Locale("en","IN")).format(number)
Run Code Online (Sandbox Code Playgroud)
“en”代表英语。“IN”代表国家(印度)。
我也遇到了同样的问题.我正在和我一起工作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.##".

只需复制过去此功能。:)
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)
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。
| 归档时间: |
|
| 查看次数: |
67837 次 |
| 最近记录: |