2016-07-30 211 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