It's well known misunderstanding of decimal precision in Java that 0.1 + 0.1 + 0.1 will output 0.30000000000000004. In general it is not a problem. It is how double works.
You can control precision with DecimalFormat. The pattern is a String and can consist of zeros, which will set a digit or 0 if no digit present, a #, which will set a digit or nothing if no digit present.
import java.text.DecimalFormat;
class DecimalTest {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("#.##");
double x = 0.1 + 0.1 + 0.1;
System.out.println(df.format(x)));
}
}
Or use BigDecimal for math operations
import java.text.DecimalFormat;
class DecimalTest {
public static void main(String[] args) {
// example 1
BigDecimal d = new BigDecimal("0.1").add(new BigDecimal("0.1")).add(new BigDecimal("0.1"));
System.out.println(d);
// example 2
double d = 0.1 + 0.1 + 0.1;
BigDecimal bd = new BigDecimal(Double.toString(d));
bd = bd.setScale(5, BigDecimal.ROUND_HALF_UP);
System.out.println(bd);
}
}
Also you can use NumberFormat
import java.text.NumberFormat;
public class DeciamlTest {
public static void main(String args[]) {
double x = 0.1 + 0.1 + 0.1;
NumberFormat fmt = NumberFormat.getInstance( );
fmt.setMinimumIntegerDigits(1);
fmt.setMinimumFractionDigits(2);
System.out.println(fmt.format(x));
}
}