2015-09-18 118 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