2012-01-04 78 views
1

我想要一個過濾器來運行一個字符串,並從雙打中消除所有不需要的.0's。我已經嘗試過替換,但像8.02這樣的情況變成了82.Java刪除所有的案例.0

我有一種感覺,這已經做過,但我找不到任何幫助。

我正在尋找一種方法,將採取String,例如:「[double] plus [double]等於[double]」,其中[double]是需要檢查的double冗餘小數。

在此先感謝!

+0

是否只想從小數部分刪除零?無論是領先還是落後,還是任何? – Lion 2012-01-05 00:00:39

+0

請跟蹤。 – Confiqure 2012-01-05 00:06:21

回答

2

假設您有一個名爲s的字符串,其中包含您所描述的文本。簡單地做:

s = s.replaceAll("([0-9])\\.0+([^0-9]|$)", "$1$2"); 

你就完成了。

好吧,所以我編輯了幾次。現在它雖然工作!

+0

非常感謝! – Confiqure 2012-01-05 00:58:25

+0

不客氣:) – davogotland 2012-01-05 01:01:39

+0

這很有趣。它工作得很好,但現在它修復了所有錯誤的最後一個數字。例如:「10.0 + 1.0 = 11。0「變成」10 + 1 = 11.0「。有什麼辦法可以解決這個問題? – Confiqure 2012-01-10 00:05:39

0

在將字符串構造成字符串之前,您不能拿走尾隨零嗎?通過這種方式,您可以使用之前發佈並被刪除的DecimalFormatter方法。

NumberFormat formatter = new DecimalFormat("0.##"); 
String str = formatter.format("8.0200"); 
System.out.println(str); 

如果他們回來,就給他們代碼。

+0

這不適用於我需要的 – Confiqure 2012-01-05 00:55:26

0

以下程序將從雙精度值的小數部分中刪除所有尾隨零。如果您的要求有所不同,您可能需要稍微修改它。

final public class Main 
{ 
    public static void main(String...args) 
    { 
     System.out.println("Enter how many numbers you want to check:->"); 
     Scanner scan = new Scanner(System.in); 

     final double KEY_VALUE = 0.0; 
     final Double TOLERANCE = 0.000000000001d; 

     int n = scan.nextInt(); 
     double[] a = new double[n]; 
     for (int i = 0; i < n; i++) 
     { 
       a[i] = scan.nextDouble(); 
     } 

     List<Double> newList = new ArrayList<Double>(); 
     for (int k = 0; k < n; k++) 
     { 
      if (Math.abs(a[k] - KEY_VALUE) < TOLERANCE) 
      { 
        continue; 
      } 
      newList.add(a[k]); 
     } 

     System.out.println(newList); 
    } 
} 

您可以專門使用DecimalFormat截斷小數位指定數量的,如果你需要這樣如下。

double x=10.4555600500000; 
DecimalFormat df=new DecimalFormat("#.##"); 
System.out.println(df.format(x)); 

會返回10.46

0

其他帖子假設你正在處理一個只包含十進制的短字符串。 假設你有大量文字字符串時,您可以使用模式/匹配器類(我在工作,匆忙所以張貼檢查錯誤。)

使用此正則表達式來代替:

/* >1 digits followed by a decimal and >1 zeros. Note capture group on first set of digits. This will only match decimals with trailing 0s, and not 8.0002 */ 
(\d+)\.0+ 

替換

/* First capture group */ 
$1 

我不確定的Java的正則表達式規則,所以用這個作爲一個概念來得到你想要的。