2016-07-30 166 views
0

我有我想转换成Double值货币字符串:斯卡拉解析货币金额和删除货币符号

val num = "181.13 kr" 
val parsed = num.replaceAll("\\p{Sc}|,", "") 

parsed = 181.13 kr 

这个例子不工作,但在这种情况下能正常工作:

val num = "€11.22" 
val parsed = num.replaceAll("\\p{Sc}|,", "") 

parsed = 11.22 
+0

请勿使用'Double'或'Float'作为货币... – Jubobs

+0

为什么不能?我想计算几个值 –

+0

Josh Bloch在Effective Java的第48项中比我能解释得更好。 – Jubobs

回答

1

尽管存在这样的问题,对于货币是否使用DoubleFloat\p{Sc}kr不符,因为它不是货币符号。添加\p{L}以匹配任何字母(在某些情况下,“€”可能为“EUR”)。

val parsed = num.replaceAll("\\p{Sc}|\\p{L}|,", "") 
+0

使用角色类更有效。另外,我认为,您还需要过滤空格字符,以便能够将结果数字转换为“BigDecimal”字样。因此,正则表达式是:[[\\ p {Sc} \\ p {L} \\ p {Zs},]' – Kolmar