正则表达式没有双重价值

时间:2015-09-18 02:54:10

标签: java regex

Double dbl = 0.003;
String str = dbl.toString();

str.matches("^\\d{1,7}\\.?\\d{1,3}$");

regex返回false

str值返回 0.0030

正则表达式失败,这与浮动问题不同。

2 个答案:

答案 0 :(得分:1)

确实表现正常(我的意思是正则表达式)。你已经将数字限制在小数点后面的三位数,你给它四位。

我建议修改字符串以删除尾随零(假设它们当然是在小数点之后),或者更改正则表达式以使其适合。

前者可以通过以下方式完成:

str.matches("^\\d{1,7}\\.?\\d{1,3}0*$");

后者涉及在正则表达式的末尾添加零:

    str.matches("^\\d{1,7}(\\.\\d{1,3})?$");

您可能还需要考虑将小数位和小数位放入一个组中,无论您选择哪种方法。换句话说,比如:

var name = $scope.user.firstname.split(" ");
console.log(name[0]) // first name;
if(name.length>1)
    console.log(name[1]) // last name

现在,正则表达式也将接受一个10位数的整数。

答案 1 :(得分:1)

正如我在你的另一个question中指出的那样,你只是遇到了已知的错误 -

http://bugs.java.com/view_bug.do?bug_id=4428022

0050 不是3个字符长。因此, false 。您可以尝试更新JDK环境或使用printf。在我的JDK7中,我得到了 -

  

0.005