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
