【问题标题】:How to remove trailing zero in a String value and remove decimal point [duplicate]如何删除字符串值中的尾随零并删除小数点[重复]
【发布时间】:2014-10-21 21:29:56
【问题描述】:

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

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

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

输入

10.0
10.00
10.10
10.2270

预期输出

10
10
10.1
10.227

【问题讨论】:

  • 尝试使用 BigDecimal
  • 最好的选择是满足此类要求的正则表达式
  • @ScaryWombat 建议的副本有一个double 作为输入。这个问题有一个String
  • @jdphenix 那么为什么 OP 做String string1 = Double.valueOf(a).toString()
  • @ScaryWombat 因为我没有仔细阅读这个问题。哎呀。

标签: java string int double


【解决方案1】:

试试

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

【讨论】:

  • 这将删除第二个尾数之外的任何内容。
【解决方案2】:

试试这样的正则表达式:

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

【讨论】:

  • 我不介意被否决。但我想知道为什么
  • 不是 DV,但正如其他人所说的“可能无法在每个区域设置。有些使用小数点作为组分隔符”
【解决方案3】:

Java 库有一个内置 类可以为它做这件事。我是BigDecimal

这是一个示例用法:

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

输出:

10.227

注意:使用带有StringBigDecimal 构造函数很重要。您可能不想要带有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]

【讨论】:

  • 我发现stripTrailingZeros() 以及对toPlainString() 的调用会导致输出超出您的规范。我已经更正了我的答案。
  • 我没有问这个问题哈哈
  • 虽然技术上是正确的,但它对我没有用,例如:1.23 变为 1.229999999999999982236431605997495353221893310546875。所以是的,肯定没有尾随零 -
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2015-08-20
  • 2015-11-19
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多