using System.Globalization;
private static string[] ChuSo = new string[10] { " không", " một", " hai", " ba"," bốn", " năm", " sáu", " bẩy", " tám", " chín" };
private static string[] Tien = new string[6] { "", " nghìn", " triệu", " tỷ", " nghìn tỷ", " triệu tỷ" };
public static void Main()
long value = 12345678459;
CultureInfo info = System.Globalization.CultureInfo.GetCultureInfo("vi-VN");
Console.WriteLine(String.Format(info, "{0:n}", value));
Console.WriteLine(DocTienBangChu(value," đồng"));
public static string DocTienBangChu(long SoTien, string strTail)
string KetQua = "", tmp = "";
int[] ViTri = new int[6];
if (SoTien < 0) return "Số tiền âm !";
if (SoTien == 0) return "Không đồng !";
if (SoTien > 8999999999999999)
ViTri[5] = (int)(so / 1000000000000000);
so = so - long.Parse(ViTri[5].ToString()) * 1000000000000000;
ViTri[4] = (int)(so / 1000000000000);
so = so - long.Parse(ViTri[4].ToString()) * +1000000000000;
ViTri[3] = (int)(so / 1000000000);
so = so - long.Parse(ViTri[3].ToString()) * 1000000000;
ViTri[2] = (int)(so / 1000000);
ViTri[1] = (int)((so % 1000000) / 1000);
ViTri[0] = (int)(so % 1000);
for (i = lan; i >= 0; i--)
tmp = DocSo3ChuSo(ViTri[i]);
if (ViTri[i] != 0) KetQua += Tien[i];
if ((i > 0) && (!string.IsNullOrEmpty(tmp))) KetQua += ",";
if (KetQua.Substring(KetQua.Length - 1, 1) == ",") KetQua = KetQua.Substring(0, KetQua.Length - 1);
KetQua = KetQua.Trim() + strTail;
return KetQua.Substring(0, 1).ToUpper() + KetQua.Substring(1);
private static string DocSo3ChuSo(int baso)
tram = (int)(baso / 100);
chuc = (int)((baso % 100) / 10);
if ((tram == 0) && (chuc == 0) && (donvi == 0)) return "";
KetQua += ChuSo[tram] + " trăm";
if ((chuc == 0) && (donvi != 0)) KetQua += " linh";
if ((chuc != 0) && (chuc != 1))
KetQua += ChuSo[chuc] + " mươi";
if ((chuc == 0) && (donvi != 0)) KetQua = KetQua + " linh";
if (chuc == 1) KetQua += " mười";
if ((chuc != 0) && (chuc != 1))