Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regex在字符串中查找价格_Java_Regex - Fatal编程技术网

Java Regex在字符串中查找价格

Java Regex在字符串中查找价格,java,regex,Java,Regex,您好,我使用的是00003600或00013650表中的退货价格 我想把它转换成36.00欧元或136.50欧元的字符串。 这可以使用正则表达式来完成 谢谢,只需解析字符串,然后除以100即可。或者使用BigDecimal和scale。只需解析字符串,然后除以100即可。或者使用BigDecimal和scale。以防其他答案不够清晰 String text = "00003600"; BigDecimal value = new BigDecimal(text).scaleByPowerOfTe

您好,我使用的是00003600或00013650表中的退货价格

我想把它转换成36.00欧元或136.50欧元的字符串。 这可以使用正则表达式来完成


谢谢,

只需解析字符串,然后除以100即可。或者使用BigDecimal和scale。

只需解析字符串,然后除以100即可。或者使用BigDecimal和scale。

以防其他答案不够清晰

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

36.00
36.00

印刷品

36.00
36.00

以防其他答案不够清楚

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

36.00
36.00

印刷品

36.00
36.00
最正确的方法(IMHO):

产出:

136.5
最正确的方法(IMHO):

产出:

136.5


不要使用正则表达式。这是
大十进制
的完美例子。读取为int,然后修改
scale
。请注意,前导零将数字解释为八进制数。因此,
010
实际上是
8
010
只有在源代码的一部分时才被视为八进制这就是您所需要的:
System.out.println(新的BigDecimal(“00003600”).scaleByPowerOfTen(-2))不要使用正则表达式。这是
大十进制
的完美例子。读取为int,然后修改
scale
。请注意,前导零将数字解释为八进制数。因此,
010
实际上是
8
010
只有在源代码的一部分时才被视为八进制这就是您所需要的:
System.out.println(新的BigDecimal(“00003600”).scaleByPowerOfTen(-2))
看起来像@MarkoTapolnik击败我获得了BigDecimal的答案:)看起来像@MarkoTapolnik击败了我获得了BigDecimal的答案:)当BigDecimal被设计为接受字符串输入时,为什么要传递它很长时间?这只是为了让我可以在同一个方法调用中传递刻度:)我避免这样做,使用
new BigDecimal(input)。setScale(2)
会好得多。我想说“好得多”是一种延伸,因为它本质上是相同的东西,但我明白你的观点,我可以同意这是一种更精简的方式。我想说,不先长时间施放是一种更好的方式,除非您有其他代码捕获parseLong可能引发的异常。当BigDecimal被设计为接受字符串输入时,为什么要传递long?这只是为了让我可以在同一个方法调用中传递刻度:)我避免这样做,使用
new BigDecimal(input)。setScale(2)
会更好。我会说“更好”从本质上讲,这是一种延伸,但我明白你的观点,我也同意这是一种更精简的方法。我认为,从定义上讲,不强制转换到长首是一种更好的方法,除非你有其他代码来捕获parseLong可能抛出的异常。正确的方法是调用
scaleByPowerOfTen(-2)
--替换了
设置刻度(2)
除法
--并且具有很小的复杂性。这就是我在评论中的想法。它只是修改了
scale
属性,根本没有重新计算。@MarkoTopolnik谢谢你的建议。正确的方法是调用
scaleByPowerOfTen(-2)
——替换
setScale(2)
divide
——并且简单。这就是我在评论中的想法。它只是修改了
比例
属性,根本没有重新计算。@MarkoTopolnik谢谢你的建议。