The NumberFormat class (from the java.text package) provides methods to format and parse numbers in a locale-sensitive manner. It is commonly used for formatting:
- General numbers
- Currency values
- Percentages
Unlike DecimalFormat, NumberFormat provides default formats based on locale and is ideal for user-facing number displays.
Key Features
- Locale-aware formatting
- Formats currency and percentages
- Parses strings back into numbers
- Rounds numbers according to locale rules
Commonly Used Methods

Simple Program
import java.text.NumberFormat;
import java.util.Locale;
public class SimpleNumberFormatExample {
public static void main(String[] args) {
double amount = 1234567.89;
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US);
String formattedAmount = currencyFormat.format(amount);
System.out.println("Formatted Amount: " + formattedAmount);
}
}
/*
Formatted Amount: $1,234,567.89
*/Problem Statement
Paani and Mahesh are designing a Loan EMI Summary System for a bank. For each customer, the system should display:
- Customer Name
- Loan Amount (Formatted as Currency)
- Interest Rate (Formatted as Percentage)
- Monthly EMI (Rounded and Formatted as Currency)
Use NumberFormat to make the financial figures user-friendly and localized.
import java.text.NumberFormat;
import java.util.Locale;
class LoanDetails {
String customerName;
double loanAmount;
double interestRate; // in decimal, e.g., 0.075 for 7.5%
double emi;
public LoanDetails(String customerName, double loanAmount, double interestRate, double emi) {
this.customerName = customerName;
this.loanAmount = loanAmount;
this.interestRate = interestRate;
this.emi = emi;
}
}
public class LoanEMISummary {
public static void main(String[] args) {
LoanDetails[] customers = {
new LoanDetails("Mahesh", 500000.00, 0.075, 10452.34),
new LoanDetails("LotusJavaPrince", 800000.00, 0.0685, 15600.75),
new LoanDetails("Priya", 300000.00, 0.0825, 9500.25)
};
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(new Locale("en", "IN"));
NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMinimumFractionDigits(1);
System.out.println("----- Loan EMI Summary -----");
System.out.printf("%-20s %-20s %-15s %-15s\n", "Customer", "Loan Amount", "Interest Rate", "Monthly EMI");
for (LoanDetails ld : customers) {
String loanAmt = currencyFormat.format(ld.loanAmount);
String interest = percentFormat.format(ld.interestRate);
String emi = currencyFormat.format(ld.emi);
System.out.printf("%-20s %-20s %-15s %-15s\n", ld.customerName, loanAmt, interest, emi);
}
}
}
/*
----- Loan EMI Summary -----
Customer Loan Amount Interest Rate Monthly EMI
Mahesh ₹5,00,000.00 7.5% ₹10,452.34
LotusJavaPrince ₹8,00,000.00 6.9% ₹15,600.75
Priya ₹3,00,000.00 8.3% ₹9,500.25
*/The NumberFormat class makes numerical output more professional and user-friendly, especially for applications involving money, percentages, or general numbers.
This class is vital in:
- Banking software
- E-commerce apps
- Invoice generation
- Reports and dashboards
