44.3 Precision Control and Rounding
Control decimal places and rounding behavior for consistent results.
44.3.1 Min/Max Fraction Digits
import java.text.NumberFormat;
NumberFormat nf = NumberFormat.getInstance(Locale.US);
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(4);
String s1 = nf.format(12.3); // "12.30" (min 2)
String s2 = nf.format(12.34567); // "12.3457" (max 4)
44.3.2 Rounding Modes
import java.text.DecimalFormat;
import java.math.RoundingMode;
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.HALF_UP);
String s1 = df.format(1.235); // "1.24"
df.setRoundingMode(RoundingMode.DOWN);
String s2 = df.format(1.239); // "1.23"
Common modes:
HALF_UP: Round to nearest; ties away from zeroHALF_EVEN: Banker's rounding (ties to even)DOWN: Truncate toward zeroCEILING: Round toward positive infinity
44.3.3 Formatting BigDecimal
import java.math.BigDecimal;
BigDecimal bd = new BigDecimal("123456.789012345");
DecimalFormat df = new DecimalFormat("#,##0.00");
df.setParseBigDecimal(true); // for parsing back to BigDecimal
String s = df.format(bd); // "123,456.79"
Ensure rounding mode matches your BigDecimal operations for consistency.
44.3.4 Grouping Control
DecimalFormat df = new DecimalFormat("#,##0.00");
df.setGroupingUsed(false);
String s = df.format(1234.56); // "1234.56" (no grouping)