我在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())
如果不知道用户将使用什么作为小数分隔符、分组分隔符、... .,就无法解析它例如,如果我输入1,250,你不知道我的意思是一千二百五十(1,250.00)还是一点二百五十(1,250)。这就是为什么Java的NumberFormat/DecimalFormat类允许你指定分组和小数分隔符。
您可以做的是希望用户使用与他的Locale设置对应的约定输入他的值,并使用
NumberFormat.getInstance( Locale )
使用JVM的当前语言环境。
注意:NumberFormat也可以解析货币。看到NumberFormat # getCurrencyInstance