2012-07-10 156 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

相关问题