我在我的应用中使用NumberFormat
来获取货币格式化的字符串。就像用户在字段中输入 12.25 一样,它将根据区域设置更改为 $ 12.25 。这里的Locale是 en-US 。
现在我想将12.25值作为格式化字符串的双重格式。
为此,我使用了:
NumberFormat.getCurrencyInstance().parse("$12.25").doubleValue();
上面给出了12.25的结果,这是我的要求。但假设用户将其语言环境更改为 en-UK 。现在对于那个语言环境,上面的语句给了我parseException。因为区域设置 en-UK ,货币字符串 $ 12.25 无法解析。
那么有没有办法从货币格式化的字符串中获取double值,而不管语言环境是什么?
答案 0 :(得分:1)
我不知道以下解决方案是否完美,但它是按照我的要求工作的。
try {
return NumberFormat.getCurrencyInstance().parse(currency).doubleValue();
} catch (ParseException e) {
e.printStackTrace();
// Currency string is not parsable
// might be different locale
String cleanString = currency.replaceAll("\\D", "");
try {
double money = Double.parseDouble(cleanString);
return money / 100;
} catch (Exception ex) {
ex.printStackTrace();
}
}
return 0;
答案 1 :(得分:0)
怎么样?
new Double(NumberFormat.getCurrencyInstance().parse("$12.25").doubleValue());
也可以使用
Double.valueOf()
创建一个Double对象,因此不需要.doubleValue()。
也Double.parseDouble(NumberFormat.getCurrencyInstance().parse("$12.25"));
可行吗
答案 2 :(得分:0)
这里有一些可以帮助您的算法:
public static void main(String[] args) {
String cash = "R$1,000.75"; //The loop below will work for ANY currency as long as it does not start with a digit
boolean continueLoop = true;
char[] cashArray = cash.toCharArray();
int cpt = 0;
while(continueLoop){
try
{
double d = Double.parseDouble(cashArray[cpt]+"");
continueLoop = false;
}catch(NumberFormatException nfe){
cpt += 1;
}
}
System.out.println(cpt);
//From here you can do whatever you want....
String extracted = cash.substring(cpt);
NumberFormat format = NumberFormat.getInstance(Locale.US); //YOUR REQUIREMENTS !!!! lol
try {
Number youValue = format.parse(extracted);
System.out.println(youValue.doubleValue());
} catch (ParseException ex) {
//handle your parse error here
}
}
你应该在输出中得到结果:
2
1000.75