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