In https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
value: 123456.789
pattern: ###.##
output: 123456.79
The value
has three digits to the right of the decimal point, but the pattern
has only two. The format
method handles this by rounding up.
We can prevent that like this.
package com.bad.blood.test;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Test {
public static void main(String args[]) {
double irr = 9.7485232;
DecimalFormat df = new DecimalFormat("###.00");
String str = df.format(irr);
System.out.println(str); // 9.75
// method 1
String str2 = String.valueOf(irr);
System.out.println(str2.substring(0, str2.indexOf('.') + 3)); // 9.74
// method 2
System.out.println( (double)(int)(irr * 100) / 100 ); // 9.74
// method 3
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setRoundingMode(RoundingMode.DOWN);
nf.setGroupingUsed(true);
System.out.println(nf.format(irr)); // 9.74
}
}
output:
9.75
9.74
9.74
9.74