Rami Del Toro
Rami Del Toro

Reputation: 1150

NumberFormat : setMaximumFractionDigits - not giving expected results

Trying to figure out why the following code is not outputting expecting results. Please advise. Thank you.

    import java.text.*;

public class Test {
    public static void main(String[] args) {
        String s = "987.123456";
        double d = 987.123456d;
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMaximumFractionDigits(5);
        System.out.println(nf.format(d) + " ");
        try {
            System.out.println(nf.parse(s));
        } catch (Exception e) {
            System.out.println("got exc");
        }
    }
}

Output:

 987.12346 // Expected 987.12345 not 987.12346
987.123456

Upvotes: 4

Views: 1559

Answers (1)

Elliott Frisch
Elliott Frisch

Reputation: 201447

Your second print doesn't format the double you've parsed.

// System.out.println(nf.parse(s));
System.out.println(nf.format(nf.parse(s))); // <-- 987.12346

To get the output you asked for, you can add a call to NumberFormat#setRoundingMode(RoundingMode) - something like

nf.setMaximumFractionDigits(5);
nf.setRoundingMode(RoundingMode.DOWN);

Upvotes: 2

Related Questions