TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thư viện xử lý dữ liệu số trong Java

Trong bài đầu tiên của chương Thư viện quan trọng, tôi đã giới thiệu đến các bạn thư viện xử lý ngày tháng trong Java. Sang bài này, tôi sẽ giới thiệu đến loại thư viện tiếp theo đó là thư viện xử lý dữ liệu số trong Java. Cuối bài này, tôi sẽ đưa ra một số bài tập để các bạn luyện tập!

1. NumberFormat

Trong Java, NumberFormat được sử dụng để định dạng số theo một quốc gia, khu vực (locale) cụ thể. Các quốc gia khác nhau sẽ có các tiêu chuẩn khác nhau để định dạng số, ví dụ ở Việt Nam thì phần ngàn của số được phân cách bằng dấu chấm (.) và phần thập phân của số được phân cách bằng dấu phẩy (,) (ví dụ 1.150,35), còn đối với Mỹ hay Anh thì phần ngàn của số được phân cách bằng dấu phẩy (,) và phần thập phân của số được phân cách bằng dấu chấm (.). Ngoài ra, NumberFormat còn được dùng để xử lý với số chẳng hạn như làm tròn số, chuyển đổi kiểu dữ liệu của số,... Sau đây chúng ta sẽ đi tìm hiểu về công dụng của NumberFormat.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Tạo mới 1 NumberFormat

Trong Java, NumberFormat được dùng để định dạng số có kiểu là double, floatlong theo tiêu chuẩn của một quốc gia, khu vực cụ thể. Để khai báo 1 NumberFormat, chúng ta sẽ import gói thư viện java.text.NumberFormat của Java. Cú pháp import như sau:

Cú pháp
// Khai báo NumberFormat
// thì import gói thư viện java.text.NumberFormat
import java.text.NumberFormat;
public class TênClass {
	// ...
}

Ví dụ dưới đây sẽ tạo mới 1 NumberFormat của khu vực mặc định của hệ thống máy ảo JVM và 1 NumberFormat theo tiêu chuẩn của nước Anh:

Ví dụ
public static void main(String[] args) {
	// tạo 1 NumberFormat để định dạng số của khu vực hiện tại của máy ảo JVM
	NumberFormat nf = NumberFormat.getInstance();
		
	// tạo 1 NumberFormat để định dạng số theo tiêu chuẩn của nước Anh
	// bằng cách tạo 1 đối tượng Locale (chi tiết về đối tượng chúng ta sẽ học sau)
	// Locale là đối tượng đại diện duy nhất cho các ngôn ngữ và quốc gia, khu vực
	// khác nhau trên toàn thế giới 
	// trong đó "en" là ngôn ngữ và "EN" là tên quốc gia.
	// Để sử dụng Locale chúng ta sẽ import gói thư viện java.util.Locale của Java
	Locale locale = new Locale("en", "EN");
		
	// NumberFormat.getInstance(locale) 
	// dùng để định dạng số chung cho quốc gia, khu vực được chỉ định (ở đây là nước Anh)
	NumberFormat en = NumberFormat.getInstance(locale);
}

Để hiển thị các thông tin về loại ngôn ngữ và tên quốc gia của khu vực mặc định của hệ thống máy ảo JVM, chúng ta sẽ làm như sau:

Ví dụ
public static void main(String[] args) {
	// Locale.getDefault() sẽ trả về biến currentLocale
	// là khu vực mặc định của hệ thống máy ảo JVM
	Locale currentLocale = Locale.getDefault();
		 
	// getDisplayLanguage() trả về tên ngôn ngữ của currentLocale
	// getDislayCountry() trả về tên quốc gia của currentLocale
	System.out.println(currentLocale.getDisplayLanguage());
	System.out.println(currentLocale.getDisplayCountry());
		 
	// getLanguage() trả về mã ngôn ngữ của currentLocale
	// getCountry() trả về mã quốc gia của currentLocale
	System.out.println(currentLocale.getLanguage());
	System.out.println(currentLocale.getCountry());
		 
	// getProperty() trả về chuỗi bao gồm các thông tin của hệ thống
	// user.country là quốc gia
	// user.language là ngôn ngữ
	System.out.println(System.getProperty("user.country"));
	System.out.println(System.getProperty("user.language"));
}

Kết quả sau khi biên dịch chương trình sẽ hiển thị các thông tin về tên và mã quốc gia, ngôn ngữ của khu vực mặc định của hệ thống máy ảo JVM:

ketqua vi du hien thi quoc gia va ngon ngu may ao JVM PNG

Định dạng số

Để định dạng số bằng NumberFormat, Java cung cấp cho chúng ta phương thức format(). Cú pháp của phương thức format() như sau:

Cú pháp
format(double number);
format(long number);

Phương thức này sẽ trả về kết quả có kiểu dữ liệu là String (chuỗi) ứng với số number sau khi định dạng.

Ví dụ
public static void main(String[] args) {
	NumberFormat currentLocale = NumberFormat.getInstance();
		
	// định dạng số của khu vực mặc định của máy ảo JVM
	// sử dụng phương thức format()
	double doubleNumber = 10.08d;
	String str = currentLocale.format(doubleNumber);
	System.out.println("Số " + doubleNumber + " sau khi định dạng = " + str);
		
	// tạo 1 NumberFormat để định dạng số theo tiêu chuẩn của nước Anh
	Locale localeEN = new Locale("en", "EN");
	NumberFormat en = NumberFormat.getInstance(localeEN);
		
	// đối với số có kiểu long được định dạng theo chuẩn của nước Anh
	// thì phần ngàn của số được phân cách bằng dấu phẩy
	long longNumber = 12345678L;
	String str1 = en.format(longNumber);
	System.out.println("Số " + longNumber + " sau khi định dạng = " + str1);
		
	// tạo 1 NumberFormat để định dạng số theo tiêu chuẩn của Việt Nam
	Locale localeVN = new Locale("vi", "VN");
	NumberFormat vn = NumberFormat.getInstance(localeVN);
		
	// đối với số float được định dạng theo chuẩn của Việt am
	// thì phần thập phân của số được phân cách bằng dấu phẩy
	double doubleNumber1 = 10.17d;
	String str2 = vn.format(doubleNumber1);
	System.out.println("Số " + doubleNumber1 + " sau khi định dạng = " + str2);
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du dinh dang so su dung phuong thuc format PNG

Định dạng tiền tệ (currency)

Để định dạng tiền tệ trong Java bằng NumberFormat chúng ta sẽ sử dụng phương thức getCurrencyInstance(). Cú pháp của phương thức getCurrencyInstance() như sau:

Cú pháp
// định dạng tiền tệ của khu vực mặc định của máy ảo JVM
// khu vực mặc định này là nước Mỹ
// nên đơn vị của tiền tệ sẽ là $
NumberFormat.getCurrencyInstance();

// tạo 1 NumberFormat để định dạng tiền tệ
// theo tiêu chuẩn của 1 khu vực, quốc gia bất kỳ
NumberFormat.getCurrencyInstance(Locale inLocale);

, trong đó inLocale là đối tượng bao gồm tên ngôn ngữ và tên quốc gia cần định dạng.

Ví dụ
public static void main(String[] args) {
	double currency = 101.999f;
		
	// định dạng tiền tệ của khu vực mặc định của máy ảo JVM
	// khu vực mặc định này là nước Mỹ
	// nên đơn vị của tiền tệ sẽ là $
	NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
	String str = currencyFormat.format(currency);
	System.out.println("Số " + currency + " sau khi định dạng = " + str);
		
	long vnd = 10000000L;
		
	// tạo 1 NumberFormat để định dạng tiền tệ theo tiêu chuẩn của Việt Nam
	// đơn vị tiền tệ của Việt Nam là đồng
	Locale localeVN = new Locale("vi", "VN");
	NumberFormat currencyVN = NumberFormat.getCurrencyInstance(localeVN);
	String str1 = currencyVN.format(vnd);
	System.out.println("Số " + vnd + " sau khi định dạng = " + str1);
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du dinh dang tien PNG

Ngoài ra, chúng ta có thể biết được kiểu đơn vị tiền tệ bằng cách sử dụng phương thức getCurrency() như sau:

Ví dụ
public static void main(String[] args) {
	double currency = 101.999f;
		
	NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
	String str = currencyFormat.format(currency);
	System.out.println("Số " + currency + " sau khi định dạng = " + str);
	System.out.println("Kiểu đơn vị tiền tệ của " + System.getProperty("user.country") +
		" là " + currencyFormat.getCurrency());
		
	long vnd = 10000000L;
		
	Locale localeVN = new Locale("vi", "VN");
	NumberFormat currencyVN = NumberFormat.getCurrencyInstance(localeVN);
	String str1 = currencyVN.format(vnd);
	System.out.println("Số " + vnd + " sau khi định dạng = " + str1);
	System.out.println("Kiểu đơn vị tiền tệ của " + localeVN.getCountry() +
		" là " + currencyVN.getCurrency());
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du hien thi kieu don vi tien te PNG

Để hiển thị tên và mã quốc gia, ngôn ngữ của các quốc gia, khu vực chúng ta làm như sau:

Ví dụ
public static void main(String[] args) {
	Locale[] arr = Locale.getAvailableLocales();
	for (Locale str : arr) {
		System.out.println("Quốc gia: " + str.getDisplayCountry() + 
			", Mã quốc gia: " + str.getCountry() +
			", Ngôn ngữ: " + str.getDisplayLanguage() +
			", Mã ngôn ngữ: " + str.getLanguage());
	}
}

Java cung cấp cho chúng ta phương thức setCurrency() để có thể thay đổi từ kiểu đơn vị tiền tệ của quốc gia, khu vực này sang kiểu đơn vị tiền tệ của quốc gia, khu vực khác. Ví dụ dưới đây sẽ minh họa cách sử dụng phương thức này:

Ví dụ
public static void main(String[] args) {
	double doubleNumber = 6.32d;
		
	// tạo 1 NumberFormat để định dạng tiền tệ theo tiêu chuẩn của của Đức
	Locale locale = new Locale("de", "DE");
	NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
	String str1 = numberFormat.format(doubleNumber);
	System.out.println("Số " + doubleNumber + " sau khi định dạng = " + str1);
	
	// thay đổi từ định dạng tiền tệ theo tiêu chuẩn của Đức 
	// sang định dạng tiền tệ theo tiêu chuẩn của Việt Nam
	// sử dụng phương thức setCurrency()
	// Currency.getInstance() sẽ trả về tiền tệ cho 1 quốc gia nào đó (ở đây là Việt Nam)
	Locale localeVN = new Locale("vi", "VN");
	numberFormat.setCurrency(Currency.getInstance(localeVN));
	String str2 = numberFormat.format(doubleNumber);
	System.out.println("Số " + doubleNumber + " sau khi định dạng = " + str2);
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du thay doi kieu don vi tien te PNG

Định dạng 1 số ở dạng phần trăm

Để định dạng 1 số ở dạng phần trăm, chúng ta sẽ sử dụng phương thức getPercentageInstance() của NumberFormat. Ví dụ dưới đây sẽ minh họa cách sử dụng phương thức này:

Ví dụ
public static void main(String[] args) {
	double percentageDoubleNumber = 0.758d;
		
	// định dạng số percentageDoubleNumber ở dạng phần trăm
	// theo khu vực mặc định của máy ảo JVM
	// khu vực mặc định này là nước Mỹ
	// lưu ý là phần trăm của số sẽ được làm tròn
	NumberFormat numEN = NumberFormat.getPercentInstance();
	String percentageEN = numEN.format(percentageDoubleNumber);
	System.out.println("Số " + percentageDoubleNumber + " ở dạng phần trăm = " + percentageEN);	
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du dinh dang so dang phan tram PNG

Làm tròn số

Để làm tròn số trong Java, chúng ta sẽ sử dụng phương thức setRoundingMode(). Ví dụ dưới đây sẽ minh họa cách sử dụng phương thức này:

Ví dụ
public static void main(String[] args) {
	NumberFormat numf = NumberFormat.getNumberInstance();
	numf.setMaximumFractionDigits(2);	// làm tròn đến 2 chữ số phần thập phân
		
	// RoundingMode.UP: làm tròn lên
	numf.setRoundingMode(RoundingMode.UP);
	System.out.println("Chế độ làm tròn: " + numf.getRoundingMode());
	System.out.println("523.454 sau khi làm tròn = " + numf.format(523.454));
	System.out.println("733.455 sau khi làm tròn = " + numf.format(733.455));
	System.out.println("823.456 sau khi làm tròn = " + numf.format(823.456));

	// RoundingMode.DOWN: làm tròn xuống
	numf.setRoundingMode(RoundingMode.DOWN);
	System.out.println("\nChế độ làm tròn: " + numf.getRoundingMode());
	System.out.println("523.454 sau khi làm tròn = " + numf.format(523.454));
	System.out.println("733.455 sau khi làm tròn = " + numf.format(733.455));
	System.out.println("823.456 sau khi làm tròn = " + numf.format(823.455));	
}
	

Kết quả sau khi biên dịch chương trình:

ketqua vi du lam tron so PNG

2. DecimalFormat

Trong Java, DecimalFormat được dùng để định dạng số theo cách mà ta chỉ định.

Tạo mới 1 DecimalFormat

Để khai báo 1 DecimalFormat, chúng ta sẽ import gói thư viện java.text.DecimalFormat của Java. Cú pháp import như sau:

Cú pháp
// Khai báo DecimalFormat
// thì import gói thư viện java.text.DecimalFormat
import java.text.DecimalFormat;
public class TênClass {
	// ...
}

Để định dạng số bằng DecimalFormat, Java cung cấp cho chúng ta phương thức format(). Cú pháp của phương thức format() như sau:

Cú pháp
format(double number);
format(long number);

Phương thức này sẽ trả về kết quả có kiểu dữ liệu là String (chuỗi) ứng với số number sau khi định dạng.

Ví dụ
public static void main(String[] args) {
	double doubleNumber = 1.223d;
		
	// khai báo 1 DecimalFormat có tên là dcf
	// để định dạng số doubleNumber theo mẫu "#.##"
	// tức là phần thập phân của số doubleNumber sau khi định dạng sẽ có 2 chữ số
	DecimalFormat dcf = new DecimalFormat("#.##");
	System.out.println("Số " + doubleNumber + " sau khi định dạng = " + 
		dcf.format(doubleNumber));
}
	

Kết quả sau khi biên dịch chương trình:

ketqua vi du tao moi 1 decimalformat PNG

Ngoài ra, chúng ta có thể sử dụng DecimalFormat để định dạng số cho một locale (khu vực cụ thể) bằng cách tạo ra 1 NumberFormat và đặt nó vào DecimalFormat sử dụng phương thức getNumberInstance():

Ví dụ
public static void main(String[] args) {
	double floatNumber = 232323.1523545d;

	// tạo 1 DecimalFormat để định dạng số theo tiêu chuẩn của nước Anh
	Locale locale = new Locale("en", "EN");
		
	// khai báo 1 DecimalFormat có tên là dcf
	// để định dạng số floatNumber theo mẫu "####,###.##"
	// tức là phần thập phân của số floatNumber sau khi định dạng sẽ có 2 chữ số
	// và phần ngàn của số sẽ được phân cách bằng dấu phẩy
	// lưu ý: trong pattern chúng ta nhận thấy phần đứng trước dấu thập phân có 7 chữ số
	// trong khi số floatNumber của chúng ta có 6 chữ số ở phần nguyên
	// vì vậy đối với DecimalFormat thì tất cả các chữ số ở phần nguyên
	// là bất kỳ và không phụ thuộc vào số chữ số phần nguyên được khai báo trong pattern
	// nhưng phần thập phân của số phải bằng với phần thập phân của pattern
	String pattern = "###,###.##";
	DecimalFormat dcf = (DecimalFormat) NumberFormat.getNumberInstance(locale);
	dcf.applyPattern(pattern);	// áp dụng mẫu pattern = "###.##" cho dcf
	System.out.println("Số " + floatNumber + " sau khi định dạng = " + 
		dcf.format(floatNumber));
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du su dung decimalformat dinh dang theo khu vuc PNG

Định dạng số ở dạng phần trăm và dạng tiền tệ

Ví dụ dưới đây sẽ minh họa cách định dạng số ở dạng phần trăm và dạng tiền tệ sử dụng DecimalFormat:

Ví dụ
public static void main(String[] args) {
	// định dạng số ở dạng tiền tệ
	long currency = 25000L;
	String patternCurrency = "$###";	// khi hiển thị sẽ có ký tự "$" đứng đầu
	DecimalFormat dcfCurrency = new DecimalFormat(patternCurrency);
	String strCurrency = dcfCurrency.format(currency);
	System.out.println("Số " + currency + " sau khi định dạng ở dạng tiền tệ = " + strCurrency);
	
	// định dạng số ở dạng phần trăm
	double percent = 0.082d;
		
	// định dạng số với 2 chữ số ở phần thập phân
	// còn phần nguyên không phụ thuộc vào phần nguyên được khai báo trong pattern
	String patternPercent = "###.##%";	// khi hiển thị sẽ có ký tự "%" đứng cuối
	DecimalFormat dcfPercent = new DecimalFormat(patternPercent);
	String strPercent = dcfPercent.format(percent);
	System.out.println("Số " + percent + " sau khi định dạng ở dạng phần trăm = " + strPercent);
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du dinh dang tien te va phan tram decimal format PNG

3. Lời kết

Trong bài này, tôi đã hướng dẫn các bạn tìm hiểu về thư viện xử lý dữ liệu số trong Java và tôi cũng đã đưa ra một số ví dụ minh họa. Sang bài này, chúng ta sẽ tìm hiểu thư viện tiếp theo - đó là thư viện toán học Math trong Java. Các bạn theo dõi nhé!

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top