2014-08-28 43 views
9

如何删除字符串值中的尾部零并删除小数点后的小数点? 我使用下面的代码:如何删除字符串值中的尾部零并删除小数点

String string1 = Double.valueOf(a).toString() 

这将删除(10.10和10.2270)尾随零,但是我没有得到我的第一次和第二次输入的预期结果。

输入

10.0 
10.00 
10.10 
10.2270 

预计输出

10 
10 
10.1 
10.227 
+0

尝试使用的BigDecimal – 2014-08-28 06:00:24

+0

最好的选择是正则表达式这样的要求 – vikeng21 2014-08-28 06:04:28

+0

@ScaryWombat所提出的重复有一个'double'作为输入。这个问题有一个'String'。 – jdphenix 2014-08-28 07:14:18

回答

-1

尝试

DecimalFormat decimalFormat = new DecimalFormat("#.##"); 
String string1 = decimalFormat.format(10.000); 
+2

这将删除第二个尾数位以外的任何内容。 – jdphenix 2014-08-28 06:50:20

-3

尝试正则表达式是这样的:

public static void main(String[] args) { 
    String s = "10.0"; 
    System.out.println(s.replaceAll("[0]+$", "").replaceAll("(\\.)(?!.*?[1-9]+)", "")); 

} 

O/P: 
10 

input :String s = "10.0750"; 
O/P : 10.075 

input : String s = "10.2750"; 
O/P : 10.275 
+1

我不介意低调。但我想知道**为什么**? – TheLostMind 2014-08-28 07:00:26

+0

不是DV,但正如其他人所说的“可能不适用于所有区域,有些使用小数点作为组分隔符” – 2014-08-29 00:01:08

7

Java库有一个内置的类,可以为此执行此操作。这是BigDecimal

下面是一个例子用法:

BigDecimal number = new BigDecimal("10.2270"); 
System.out.println(number.stripTrailingZeros().toPlainString()); 

输出:

10.227 

注:使用BigDecimal构造函数,一个String是很重要的。你可能不想要那个需要double的人。


这里是一个将采取Collection<String>和去除尾随零,礼品包装返回数的另一种Collection<String>的方法。

public static Collection<String> stripZeros(Collection<String> numbers) { 
    if (numbers == null) { 
     throw new NullPointerException("numbers is null"); 
    } 

    ArrayList<String> value = new ArrayList<>(); 

    for (String number : numbers) { 
     value.add(new BigDecimal(number).stripTrailingZeros().toPlainString()); 
    } 

    return Collections.unmodifiableList(value); 
} 

实例:

ArrayList<String> input = new ArrayList<String>() {{ 
    add("10.0"); add("10.00"); add("10.10"); add("10.2270"); 
}}; 

Collection<String> output = stripZeros(input); 
System.out.println(output); 

输出:

[10, 10, 10.1, 10.227] 
+0

没办法,很酷+1 – 2014-08-28 06:25:11

+1

我发现'stripTrailingZeros()'同时调用了'toPlainString ()'会导致超出规范的输出。我纠正了我的答案。 – jdphenix 2014-08-28 06:42:11

+0

我没有问这个问题lol – 2014-08-28 06:44:29