2015-09-18 74 views
-1
Double dbl = 0.003; 
String str = dbl.toString(); 

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

regex返回false正则表达式失败的双值

str值返回为0.0030

正则表达式失败其是从浮动问题不同。

+0

这个问题被标记为一些其他问题的重复和评论有人提到,这不是重复。这与Float问题无关。 – changeme

回答

1

它确实表现正确(我的意思是正则表达式位)。您已将小数点后的位数限制为三位,并且您将其设置为四位。

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

前者可以像做:

s = s.replaceFirst("(\\.\\d+)0+$", "$1").replaceFirst("\\.0+$", ".0"); 

后者涉及加零到正则表达式的结尾:

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

你也可以考虑把小数和分数将数字转换为组,而不管您选择哪种方法。换句话说,像这样:

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

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

+0

现在我正在使用replaceFirst,正如你所建议的那样适用于我。 – changeme

1

正如我在你的其他question指出,你只是运行到已知的bug-

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

不是3个字符长。因此,虚假。您可以尝试更新JDK环境或使用printf。在我的JDK7,我GET-

0.005

真正

+0

我得到了这个,但当值是0.0052仍然我得到的输出为0.005 – changeme

+0

我不这么认为。 –

+0

我确认问题中的行为仅在Java 6和之前的版本中,并且错误在Java 7中得到了修复。 – nhahtdh