java中从一个区域设置到另一个区域设置(en_US)的十进制格式转换

java中从一个区域设置到另一个区域设置(en_US)的十进制格式转换,java,locale,Java,Locale,我有一个非“en_US”语言环境中字符串格式的十进制数。我想在“en_US”语言环境中将其转换为十进制 例如:“123.345.123,45”->“123345123.45”或“123345123.45” “123345,45”->“123345.45”或“123345.45” “123.345”->“123345”或“123345”数字格式似乎可以满足您的需求 在oracle文档中找到此代码段: static public void displayNumber(Locale currentLo

我有一个非“en_US”语言环境中字符串格式的十进制数。我想在“en_US”语言环境中将其转换为十进制

例如:“123.345.123,45”->“123345123.45”或“123345123.45”

“123345,45”->“123345.45”或“123345.45”


“123.345”->“123345”或“123345”

数字格式似乎可以满足您的需求

在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 987246 fr_fr

123.456德鲁德

345.987246德鲁德

123456欧洲/美国3

45987.246美国

以下是内容来源的链接:


为了将格式化的数字字符串从一个区域设置转换为另一个区域设置,必须知道生成字符串的区域设置。从那里,您可以使用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);
}

我之前看到过这一点,但遇到的问题是,我的输入是一个字符串“123.345,67”,它不在en_US语言环境中,因此我需要一种方法,首先将该字符串转换为该特定语言环境中的有效双精度。这就是我被卡住的地方。更新的回复显示了NumberFormat如何达到这个目的。如果您不知道字符串的原始区域设置,这将不起作用。谢谢@Jeremiah,这就是我要找的。。现在我可以使用它,但我想。。。再次感谢
NumberFormat parser=NumberFormat.getNumberInstance(新语言环境(“de_de”);NumberFormat formatter=NumberFormat.getNumberInstance(新语言环境(“en_US”);Number rawNumber=parser.parse(“1.234.567,89”)格式化程序。格式(rawNumber);--->给出1.234,但如果我使用Locale.Germany代替de_de,答案是1234567.89为什么ans在本地时不同。Germany与de_de LocaleScale相同。Germany指定的语言为“de”,没有国家代码。使用国家代码DE更改解释。基本上,Locale.Germany与Locale(“de”)相同,这似乎与语言和国家代码“de_de”不同。检查java.util.Locale的源代码