我的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)
有没有办法将其解析为适当的double值,无论格式如何?目前正在查看this,但不确定它是否会有所帮助。我目前的方法仅适用于美国格式:
total = Double.parseDouble(val.replace('$','').replaceAll(",","").trim())
答案 0 :(得分:1)
如果不知道用户将使用什么作为小数分隔符,分组分隔符,...,则无法解析它。例如,如果我键入1,250,你不知道我的意思是一千二百五十(1,250.00),还是一点二百五十(1.250)。 这就是Java的NumberFormat / DecimalFormat类允许您指定分组和小数分隔符的原因。
您可以做的是希望用户使用与其语言环境设置相对应的约定输入他的值,并使用
NumberFormat.getInstance( Locale )
使用JVM的当前Locale。
注意:使用NumberFormat,您还可以解析货币。见NumberFormat#getCurrencyInstance