Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除字符串值中的尾随零和小数点_Java_String_Int_Double - Fatal编程技术网

Java 如何删除字符串值中的尾随零和小数点

Java 如何删除字符串值中的尾随零和小数点,java,string,int,double,Java,String,Int,Double,如果字符串仅包含小数点后的零,如何删除字符串值中的尾随零并删除小数点? 我正在使用以下代码: String string1 = Double.valueOf(a).toString() 这将删除(10.10和10.2270)中的尾随零,但我没有得到第一个和第二个输入的预期结果 输入 预期产量 10 10 10.1 10.227 试一试 试试下面这样的正则表达式: public static void main(String[] args) { String s = "10.0";

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

String string1 = Double.valueOf(a).toString()
这将删除(10.10和10.2270)中的尾随零,但我没有得到第一个和第二个输入的预期结果

输入

预期产量

10
10
10.1
10.227
试一试

试试下面这样的正则表达式:

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

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

下面是一个示例用法:

BigDecimal number = new BigDecimal("10.2270");  
System.out.println(number.stripTrailingZeros().toPlainString());
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.227
注意:使用接受
字符串的
BigDecimal
构造函数非常重要。您可能不想要一个双精度的


这里有一个方法,它将接受一个
集合
,然后返回另一个
集合
,其中数字的尾随零已被删除,并以礼品包装

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);
}

尝试使用BigDecimalbest bet是这样的正则表达式requirement@ScaryWombat建议的副本有一个
双精度
作为输入。这个问题有一个
String
@jdpenix,那么为什么OP做
String string1=Double.valueOf(a).toString()
@ScaryWombat,因为我没有仔细阅读这个问题。哎呀。我发现
stripTrailingZeros()
调用
toPlainString()
会导致输出超出您的规范。我已经更正了我的答案。我没有问这个问题,但技术上正确,这对我没有用,例如:
1.23
变为
1.22999999999822364316059974953221893310546875
。所以,是的,没有尾随的零是肯定的-这将删除任何超过第二尾数数字。我不介意被否决。但我想知道为什么?不是DV,而是正如其他人所说的“可能不适用于所有语言环境。有些人使用小数点作为组分隔符”
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]