How to remove trailing zero in a String value and remove decimal point

23,097

The Java library has a built-in class that can do this for it. It's BigDecimal.

Here is an example usage:

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

Output:

10.227

Note: It is important to use the BigDecimal constructor that takes a String. You probably don't want the one that takes a double.


Here's a method that will take a Collection<String> and return another Collection<String> of numbers with trailing zeros removed, gift wrapped.

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

Example usage:

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

Outputs:

[10, 10, 10.1, 10.227]
Share:
23,097
Marjer
Author by

Marjer

Updated on August 28, 2020

Comments

  • Marjer
    Marjer over 3 years

    How do I remove trailing zeros in a String value and remove decimal point if the string contains only zeros after the decimal point? I'm using the below code:

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

    This removes trailing zeros in (10.10 and 10.2270), but I do not get my expected result for 1st and 2nd inputs.

    Input

    10.0
    10.00
    10.10
    10.2270
    

    Expected output

    10
    10
    10.1
    10.227
    
  • jdphenix
    jdphenix over 9 years
    I discovered that stripTrailingZeros() with also a call to toPlainString() results in output that is outside of your spec. I have corrected my answer.
  • Kick Buttowski
    Kick Buttowski over 9 years
    I did not ask the question lol
  • jdphenix
    jdphenix over 9 years
    This would remove anything beyond the 2nd mantissa digit.
  • TheLostMind
    TheLostMind over 9 years
    I don't mind getting downvoted. But I would like to know why?
  • Scary Wombat
    Scary Wombat over 9 years
    not the DV, but as someone else said "May not work in every locale. Some use the decimal point as group separators"
  • ycomp
    ycomp over 6 years
    while technically correct it is not useful for me, case in point: 1.23 becomes 1.229999999999999982236431605997495353221893310546875. So yes, no trailing zeros for sure –