CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Đổ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 - 645

Trong 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!

QUẢNG CÁO - TIẾP THỊ