2012-07-10 178 views
1

嗨服務中的價格我使用收益價格在形式00003600或00013650正則表達式查找字符串

我想這個轉換到形式36.00歐元或136.50歐元的字符串。 這可以使用正則表達式來完成。

謝謝,

+4

不要使用正則表達式。這對於BigDecimal來說是一個完美的例子。讀爲int,然後修改'scale'。 – 2012-07-10 12:17:05

+0

請注意,前導零使數字解釋爲八進制數字。所以'010'實際上是'8'。 – 2012-07-10 12:23:36

+0

'010'被認爲是八進制的,只有部分源代碼 – 2012-07-10 12:27:46

回答

1

如果其他的答案還不夠明確

String text = "00003600"; 
BigDecimal value = new BigDecimal(text).scaleByPowerOfTen(-2); 
System.out.println(value); 

打印

36.00 

OR

String text = "00003600"; 
double value = Double.parseDouble(text)/100; 
System.out.printf("%.2f%n", value); 

打印

36.00 
+0

*正確的方法*是調用'scaleByPowerOfTen(-2)' - 替換'setScale(2)'和'divide' - 並且瑣碎的複雜性。這正是我在我的評論中實際想到的。它只是修改'scale'屬性,根本不需要重新計算。 – 2012-07-10 12:46:15

+0

@MarkoTopolnik謝謝你的建議。 – 2012-07-10 13:28:10

4

只是解析字符串,然後除以100.或使用BigDecimal和縮放。

+0

看起來像@MarkoTapolnik打我到BigDecimal的答案:) – 2012-07-10 12:19:46

0

最正確的方式(恕我直言):

String input = "00013650"; 
BigDecimal value = BigDecimal.valueOf(Long.parseLong(input), 2); 
String output = value.toPlainString(); 
System.out.println(output); 

輸出:

136.5 
+0

當BigDecimals被設計爲接受字符串輸入時,爲什麼你會通過它? – 2012-07-10 12:38:38

+0

只要這樣我就可以通過相同的方法調用:) – 2012-07-10 12:44:03

+0

Id避免這樣做,使用'new BigDecimal(input).setScale(2)'會好很多。 – 2012-07-10 12:45:32

相關問題