斯卡拉解析货币金额和删除货币符号
问题描述:
我有我想转换成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
答
尽管存在这样的问题,对于货币是否使用Double
或Float
:\p{Sc}
与kr
不符,因为它不是货币符号。添加\p{L}
以匹配任何字母(在某些情况下,“€”可能为“EUR”)。
val parsed = num.replaceAll("\\p{Sc}|\\p{L}|,", "")
+0
使用角色类更有效。另外,我认为,您还需要过滤空格字符,以便能够将结果数字转换为“BigDecimal”字样。因此,正则表达式是:[[\\ p {Sc} \\ p {L} \\ p {Zs},]' – Kolmar
请勿使用'Double'或'Float'作为货币... – Jubobs
为什么不能?我想计算几个值 –
Josh Bloch在Effective Java的第48项中比我能解释得更好。 – Jubobs