Java 从不同的区域设置货币格式格式化字符串中的货币

Java 从不同的区域设置货币格式格式化字符串中的货币,java,groovy,numbers,format,Java,Groovy,Numbers,Format,我的groovy应用程序中有一个java字符串变量。该变量包含可能不同货币格式的用户价格输入: val = "1,250.50" val = "1.250,50" val = "1250,50" val = "1250.50" (etc.. I don't know if there are anymore funny way other countries write this) 是否有方法将其解析为适当的双精度值,而不考虑格式?目前正在考虑,但不确定是否有帮助。我当前的方法仅适用于美国

我的groovy应用程序中有一个java字符串变量。该变量包含可能不同货币格式的用户价格输入:

val = "1,250.50"
val = "1.250,50"
val = "1250,50"
val = "1250.50" 

(etc.. I don't know if there are anymore funny way other countries write this)
是否有方法将其解析为适当的双精度值,而不考虑格式?目前正在考虑,但不确定是否有帮助。我当前的方法仅适用于美国格式:

total = Double.parseDouble(val.replace('$','').replaceAll(",","").trim())

如果不知道用户将使用什么作为十进制分隔符、分组分隔符等,则无法对其进行分析。例如,如果我键入1250,您不知道我的意思是一千二百五十(1250.00),还是一点二百五十(1.250)。 这就是为什么Java的NumberFormat/DecimalFormat类允许您指定分组和小数分隔符

您可以做的是希望用户使用与其区域设置对应的约定输入其值,并使用

NumberFormat.getInstance( Locale )
使用JVM的当前区域设置


注意:使用NumberFormat还可以解析货币。请参见

如果不知道用户将使用什么作为十进制分隔符、分组分隔符等,则无法解析它。例如,如果我键入1250,您不知道我的意思是一千二百五十(1250.00),还是一点二百五十(1.250)。 这就是为什么Java的NumberFormat/DecimalFormat类允许您指定分组和小数分隔符

您可以做的是希望用户使用与其区域设置对应的约定输入其值,并使用

NumberFormat.getInstance( Locale )
使用JVM的当前区域设置


注意:使用NumberFormat还可以解析货币。见

谢谢。我刚刚意识到,不仅仅是因为他们在欧盟,他们将遵循欧盟公约,反之亦然。我花了一段时间才弄明白:)谢谢。我刚刚意识到,不仅仅是因为他们在欧盟,他们将遵循欧盟公约,反之亦然。我花了一段时间才弄明白:)