2016-06-10 110 views
2

我有一个Double:5096,54 我需要格式化为:5.096,54(欧洲货币格式) 我试着用这段代码没有任何成功。如何格式化欧洲语言的号码

Locale l = Locale.getDefault(); // ("fr" in my case) 
// Get the formatter for the specific locale 
NumberFormat formatter = NumberFormat.getNumberInstance(l); 

// Always 2 decimals 
formatter.setMinimumFractionDigits(2); 
formatter.setMaximumFractionDigits(2); 

// Format 
return formatter.format(d); 

输出:5 096,54,当我期待5.096,54 任何想法,为什么失败?

+0

大多数欧洲格式是空间千位分隔符和昏迷小数分隔符......但您可以尝试意大利语或挪威语区域 – Selvin

+0

http://ideone.com/IHc6ID https://docs.oracle.com/cd/E19455-01/806-0169/overview- 9/index.html – Selvin

+0

感谢所有的帮助,混淆来自Locale“fr”,是FRENCH(并且输出是e。 g:5 096,54),但在比利时,法国应该是5.096,54。因此,将我的Locale设置为'Locale l = new Locale(“fr”,“BE”);'确实解决了我的问题 – estoke

回答

0

它的工作对我来说与西班牙语言环境:

Double d = 5096.54; 

    Locale l = Locale.getDefault(); 

    NumberFormat formatter = NumberFormat.getNumberInstance(l); 

    formatter.setMinimumFractionDigits(2); 
    formatter.setMaximumFractionDigits(2); 

    String d1 = formatter.format(d); 

结果:5.096,54

看来法语语言环境中使用的东西,看起来像一个千位分隔符的空间,你可以检查此问题:

Java FRANCE/FRENCH Locale thousands separator looks like space but not actually

他们与此变通办法解决它:

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE); 
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols(); 
char thousandSep = symbols.getGroupingSeparator(); 

input =input.replace(thousandSep, '.'); 

您可以使用相同的解决方法,或者使用(与您的需求相匹配或任何其他)西班牙语语言环境

0

你可以做到以下几点:

Locale l = Locale.getDefault(); 
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(l); 

DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); 
symbols.setGroupingSeparator('.'); // setting the thousand separator 
// symbols.setDecimalSeparator(','); optionally setting the decimal separator 

formatter.setDecimalFormatSymbols(symbols); 
formatter.setMinimumFractionDigits(2); 
formatter.setMaximumFractionDigits(2); 

String formattedString = formatter.format(yourDouble);