Đổi số tiền vnđ thành chữ trong C# và Java
Đăng lúc: 09:29 AM - 01/01/2024 bởi Charles Chung - 645Trong các hóa đơn chứng từ, bên cạnh số tiền bằng số là dòng văn bản ghi rõ số tiền bằng chữ, vậy làm thế nào để chúng ta có thể chuyển đổi được số sang chữ trong các ngôn ngữ lập trình? Bài viết này tôi sẽ chia sẻ đoạn code trong C# và Java
Giới thiệu
Việc chuyển đổi số thành chữ trong các hóa đơn tính tiền đã trở thành 1 điều không thể thiếu đối với những người làm trong lĩnh vực ngân hàng hay kể cả những doanh nghiệp lớn, nhỏ. Sau đây tôi sẽ hướng dẫn cho các bạn cách để có thể chuyển đổi số tiền thành chữ bằng ngôn ngữ C# và Java nhé!
Code với C#
internal class Program { public static string ConvertNumberToTextVND(decimal total) { try { string rs = ""; total = Math.Round(total, 0); string[] ch = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" }; string[] rch = { "lẻ", "mốt", "", "", "", "lăm" }; string[] u = { "", "mươi", "trăm", "ngàn", "", "", "triệu", "", "", "tỷ", "", "", "ngàn", "", "", "triệu" }; string nstr = total.ToString(); int[] n = new int[nstr.Length]; int len = n.Length; for (int i = 0; i < len; i++) { n[len - 1 - i] = Convert.ToInt32(nstr.Substring(i, 1)); } for (int i = len - 1; i >= 0; i--) { if (i % 3 == 2)// số 0 ở hàng trăm { if (n[i] == 0 && n[i - 1] == 0 && n[i - 2] == 0) continue;//nếu cả 3 số là 0 thì bỏ qua không đọc } else if (i % 3 == 1) // số ở hàng chục { if (n[i] == 0) { if (n[i - 1] == 0) { continue; }// nếu hàng chục và hàng đơn vị đều là 0 thì bỏ qua. else { rs += " " + rch[n[i]]; continue;// hàng chục là 0 thì bỏ qua, đọc số hàng đơn vị } } if (n[i] == 1)//nếu số hàng chục là 1 thì đọc là mười { rs += " mười"; continue; } } else if (i != len - 1)// số ở hàng đơn vị (không phải là số đầu tiên) { if (n[i] == 0)// số hàng đơn vị là 0 thì chỉ đọc đơn vị { if (i + 2 <= len - 1 && n[i + 2] == 0 && n[i + 1] == 0) continue; rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]); continue; } if (n[i] == 1)// nếu là 1 thì tùy vào số hàng chục mà đọc: 0,1: một / còn lại: mốt { rs += " " + ((n[i + 1] == 1 || n[i + 1] == 0) ? ch[n[i]] : rch[n[i]]); rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]); continue; } if (n[i] == 5) // cách đọc số 5 { if (n[i + 1] != 0) //nếu số hàng chục khác 0 thì đọc số 5 là lăm { rs += " " + rch[n[i]];// đọc số rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);// đọc đơn vị continue; } } } rs += (rs == "" ? " " : ", ") + ch[n[i]];// đọc số rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);// đọc đơn vị } if (rs[rs.Length - 1] != ' ') rs += " đồng"; else rs += "đồng"; if (rs.Length > 2) { string rs1 = rs.Substring(0, 2); rs1 = rs1.ToUpper(); rs = rs.Substring(2); rs = rs1 + rs; } return rs.Trim().Replace("lẻ,", "lẻ").Replace("mươi,", "mươi").Replace("trăm,", "trăm").Replace("mười,", "mười"); } catch { return ""; } } static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; decimal currency = 236539100023; Thread.CurrentThread.CurrentCulture = new CultureInfo("vi"); Console.WriteLine("Tổng tiền: " + currency.ToString("C")); Console.WriteLine("Viết bằng chữ: " + ConvertNumberToTextVND(currency)); } }
Kết quả
Code với Java
import java.text.NumberFormat; import java.util.Locale; public class ProgramJava { public static String convertNumberToTextVND(long total) { try { String rs = ""; String[] ch = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" }; String[] rch = { "lẻ", "mốt", "", "", "", "lăm" }; String[] u = { "", "mươi", "trăm", "ngàn", "", "", "triệu", "", "", "tỷ", "", "", "ngàn", "", "", "triệu" }; String nstr = String.valueOf(total); long[] n = new long[nstr.length()]; int len = n.length; for (int i = 0; i < len; i++) { n[len - 1 - i] = Long.valueOf(nstr.substring(i, i+1)); } for (int i = len - 1; i >= 0; i--) { if (i % 3 == 2)// số 0 ở hàng trăm { if (n[i] == 0 && n[i - 1] == 0 && n[i - 2] == 0) continue;//nếu cả 3 số là 0 thì bỏ qua không đọc } else if (i % 3 == 1) // số ở hàng chục { if (n[i] == 0) { if (n[i - 1] == 0) { continue; }// nếu hàng chục và hàng đơn vị đều là 0 thì bỏ qua. else { rs += " " + rch[(int)n[i]]; continue;// hàng chục là 0 thì bỏ qua, đọc số hàng đơn vị } } if (n[i] == 1)//nếu số hàng chục là 1 thì đọc là mười { rs += " mười"; continue; } } else if (i != len - 1)// số ở hàng đơn vị (không phải là số đầu tiên) { if (n[i] == 0)// số hàng đơn vị là 0 thì chỉ đọc đơn vị { if (i + 2 <= len - 1 && n[i + 2] == 0 && n[i + 1] == 0) continue; rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]); continue; } if (n[i] == 1)// nếu là 1 thì tùy vào số hàng chục mà đọc: 0,1: một / còn lại: mốt { rs += " " + ((n[i + 1] == 1 || n[i + 1] == 0) ? ch[(int)n[i]] : rch[(int)n[i]]); rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]); continue; } if (n[i] == 5) // cách đọc số 5 { if (n[i + 1] != 0) //nếu số hàng chục khác 0 thì đọc số 5 là lăm { rs += " " + rch[(int)n[i]];// đọc số rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);// đọc đơn vị continue; } } } rs += (rs == "" ? " " : ", ") + ch[(int)n[i]];// đọc số rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);// đọc đơn vị } if (rs.charAt(rs.length() - 1) != ' ') rs += " đồng"; else rs += "đồng"; if (rs.length() > 2) { String rs1 = rs.substring(0, 2); rs1 = rs1.toUpperCase(); rs = rs.substring(2); rs = rs1 + rs; } return rs.trim().replace("lẻ,", "lẻ").replace("mươi,", "mươi").replace("trăm,", "trăm").replace("mười,", "mười"); } catch(Exception ex) { ex.printStackTrace(); return ""; } } public static void main(String[] args) { long currency=236539100023L; NumberFormat numberformat=NumberFormat.getCurrencyInstance(new Locale("vi","VN")); System.out.println("Tổng tiền: "+ numberformat.format(currency)); System.out.println("Viết bằng chữ:"+convertNumberToTextVND(236539100023L)); } }
Kết quả
Mọi thắc mắc xin liên hệ thầy Charles Chung để được giải đáp.
thay lời cảm ơn!
Các bài cũ hơn
- Tích hợp trình soạn thảo CKEditor và trình quản lý tệp tin elFinder trong Asp.Net Core MVC 6 (08:26 PM - 29/12/2023)
- Xử lý quay và dịch chuyển ảnh sử dụng OpenCV trong Python (10:48 PM - 27/12/2023)
- Làm thế nào để gửi email trong Asp.Net Core 6 sử dụng thư viện MailKit và MimeKit (03:01 PM - 27/12/2023)
- Resize hình ảnh sử dụng thư viện OpenCV trong Pyhton (10:57 AM - 25/12/2023)
- Cài đặt và sử dụng thư viện OpenCV trong Python với Visual Code (10:48 AM - 24/12/2023)