在Java中从一个语言环境(EN_US)的小数格式转换



我在不是'en_us'的语言环境中有一个小数点。我想将其转换为" en_us"语言环境中的小数。

eg:" 123.345.123,45" ->" 123345123.45"或" 123,345,123.45"

" 123 345,45" ->" 123345.45"或" 123,345.45"

" 123.345" ->" 123345"或" 123,345"

看来NumberFormat会做您想要的。

在Oracle文档中找到此片段:

static public void displayNumber(Locale currentLocale) {
Integer quantity = new Integer(123456);
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String quantityOut;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
quantityOut = numberFormatter.format(quantity);
amountOut = numberFormatter.format(amount);
System.out.println(quantityOut + "   " + currentLocale.toString());
System.out.println(amountOut + "   " + currentLocale.toString());
}

此示例打印以下内容;它显示了相同数字的格式如何随着语言环境而变化:

123 456 fr_fr

345 987,246 fr_fr

123.456 de_de

345.987,246 de_de

123,456 en_us 3

45,987.246 en_us

这是内容来自:

的链接

https://docs.oracle.com/javase/tutorial/i18n/format/numberformat.html


为了将一个格式化的数字字符串从一个语言环境转换为另一个语言环境,您必须知道字符串生成的位置。从那里您可以使用numberFormat.parse将字符串转换回一个数字。然后使用目标语言环境创建另一个numberFormat并使用.format方法更改字符串表示。

static public String displayNumber(String startValue, Locale startLocale, Locale endLocale) throws ParseException {
    NumberFormat parser = NumberFormat.getNumberInstance(startLocale);
    NumberFormat formatter = NumberFormat.getNumberInstance(endLocale);
    
    Number rawNumber = parser.parse(startValue);
    
    return formatter.format(rawNumber);
}

最新更新