如何删除String值中的尾随零并删除小数点

Mar*_*jer 9 java string double int

如果字符串在小数点后仅包含零,如何删除字符串值中的尾随零并删除小数点?我正在使用以下代码:

String string1 = Double.valueOf(a).toString()
Run Code Online (Sandbox Code Playgroud)

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

输入

10.0
10.00
10.10
10.2270
Run Code Online (Sandbox Code Playgroud)

预期产出

10
10
10.1
10.227
Run Code Online (Sandbox Code Playgroud)

jdp*_*nix 9

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

以下是一个示例用法:

BigDecimal number = new BigDecimal("10.2270");  
System.out.println(number.stripTrailingZeros().toPlainString());
Run Code Online (Sandbox Code Playgroud)

输出:

10.227
Run Code Online (Sandbox Code Playgroud)

注意:使用BigDecimal带有a 的构造函数很重要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);
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

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);
Run Code Online (Sandbox Code Playgroud)

输出:

[10, 10, 10.1, 10.227]
Run Code Online (Sandbox Code Playgroud)

  • 我发现 `stripTrailingZeros()` 还调用了 `toPlainString()` 会导致输出超出您的规范。我已经更正了我的答案。 (2认同)

Vir*_*raj -1

尝试

DecimalFormat decimalFormat = new DecimalFormat("#.##");
String string1 = decimalFormat.format(10.000);
Run Code Online (Sandbox Code Playgroud)

  • 这将删除第二个尾数之外的任何内容。 (3认同)