Double dbl = 0.003;
String str = dbl.toString();
str.matches("^\\d{1,7}\\.?\\d{1,3}$");
regex
返回false
。正则表达式失败的双值
str
值返回为0.0030
正则表达式失败其是从浮动问题不同。
Double dbl = 0.003;
String str = dbl.toString();
str.matches("^\\d{1,7}\\.?\\d{1,3}$");
regex
返回false
。正则表达式失败的双值
str
值返回为0.0030
正则表达式失败其是从浮动问题不同。
它确实表现正确(我的意思是正则表达式位)。您已将小数点后的位数限制为三位,并且您将其设置为四位。
我建议或者修改字符串以删除尾随零(假设它们在小数点后),或者更改正则表达式使其适合。
前者可以像做:
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位数的整数。
现在我正在使用replaceFirst,正如你所建议的那样适用于我。 – changeme
正如我在你的其他question指出,你只是运行到已知的bug-
http://bugs.java.com/view_bug.do?bug_id=4428022
不是3个字符长。因此,虚假。您可以尝试更新JDK环境或使用printf。在我的JDK7,我GET-
0.005
真正
这个问题被标记为一些其他问题的重复和评论有人提到,这不是重复。这与Float问题无关。 – changeme