using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Ham_doi_so_thanh_chu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string str = " ";
public static string ToString(decimal number)
{
string s = number.ToString("#");
string[] so = new string[] { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
string[] hang = new string[] { "", "nghìn", "triệu", "tỷ" };
int i, j, donvi, chuc, tram;
bool booAm = false;
decimal decS = 0;
//Tung addnew
try
{
decS = Convert.ToDecimal(s.ToString());
}
catch
{
}
if (decS < 0)
{
decS = -decS;
s = decS.ToString();
booAm = true;
}
i = s.Length;
if (i == 0)
str = so[0] + str;
else
{
j = 0;
while (i > 0)
{
donvi = Convert.ToInt32(s.Substring(i - 1, 1));
i--;
if (i > 0)
chuc = Convert.ToInt32(s.Substring(i - 1, 1));
else
chuc = -1;
i--;
if (i > 0)
tram = Convert.ToInt32(s.Substring(i - 1, 1));
else
tram = -1;
i--;
if ((donvi > 0) || (chuc > 0) || (tram > 0) || (j == 3))
str = hang[j] + str;
j++;
if (j > 3) j = 1;
if ((donvi == 1) && (chuc > 1))
str = "một " + str;
else
{
if ((donvi == 5) && (chuc > 0))
str = "lăm " + str;
else if (donvi > 0)
str = so[donvi] + " " + str;
}
if (chuc < 0)
break;
else
{
if ((chuc == 0) && (donvi > 0)) str = "lẻ " + str;
if (chuc == 1) str = "mười " + str;
if (chuc > 1) str = so[chuc] + " mươi " + str;
}
if (tram < 0) break;
else
{
if ((tram > 0) || (chuc > 0) || (donvi > 0)) str = so[tram] + " trăm " + str;
}
str = " " + str;
}
}
if (booAm) str = "Âm " + str;
return str;// = str+ "đồng chẵn";
}
private void button1_Click(object sender, EventArgs e)
{
//textBox2.Text = ToString(decimal.Parse(textBox1.Text));
textBox2.Text = DocTienBangChu(long.Parse(textBox1.Text)," Đồng");
}
private string[] ChuSo = new string[10] { " không", " một", " hai", " ba", " bốn", " năm", " sáu", " bẩy", " tám", " chín" };
private string[] Tien = new string[6] { "", " nghìn", " triệu", " tỷ", " nghìn tỷ", " triệu tỷ" };
// Hàm đọc số thành chữ
public string DocTienBangChu(long SoTien, string strTail)
{
int lan, i;
long so;
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 > 0)
{
so = SoTien;
}
else
{
so = -SoTien;
}
//Kiểm tra số quá lớn
if (SoTien > 8999999999999999)
{
SoTien = 0;
return "";
}
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);
if (ViTri[5] > 0)
{
lan = 5;
}
else if (ViTri[4] > 0)
{
lan = 4;
}
else if (ViTri[3] > 0)
{
lan = 3;
}
else if (ViTri[2] > 0)
{
lan = 2;
}
else if (ViTri[1] > 0)
{
lan = 1;
}
else
{
lan = 0;
}
for (i = lan; i >= 0; i--)
{
tmp = DocSo3ChuSo(ViTri[i]);
KetQua += tmp;
if (ViTri[i] != 0) KetQua += Tien[i];
if ((i > 0) && (!string.IsNullOrEmpty(tmp))) KetQua += ",";//&& (!string.IsNullOrEmpty(tmp))
}
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);
}
// Hàm đọc số có 3 chữ số
private string DocSo3ChuSo(int baso)
{
int tram, chuc, donvi;
string KetQua = "";
tram = (int)(baso / 100);
chuc = (int)((baso % 100) / 10);
donvi = baso % 10;
if ((tram == 0) && (chuc == 0) && (donvi == 0)) return "";
if (tram != 0)
{
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";
switch (donvi)
{
case 1:
if ((chuc != 0) && (chuc != 1))
{
KetQua += " mốt";
}
else
{
KetQua += ChuSo[donvi];
}
break;
case 5:
if (chuc == 0)
{
KetQua += ChuSo[donvi];
}
else
{
KetQua += " lăm";
}
break;
default:
if (donvi != 0)
{
KetQua += ChuSo[donvi];
}
break;
}
return KetQua;
}
}
}VB:Public Function Number2Text(ByVal sNumber As String) As String
Dim mLen As Long, i As Long
Dim mDigit As Long, mTemp As String
Dim mNumText() As String
mNumText = Split("không;một;hai;ba;bốn;năm;sáu;bảy;t ám;chín", ";")
mLen = Len(sNumber)
For i = 1 To mLen
mDigit = Mid(sNumber, i, 1)
mTemp = mTemp & " " & mNumText(mDigit)
If (mLen = i) Then Exit For
Select Case (mLen - i) Mod 9
Case 0
mTemp = mTemp & " tỷ"
If Mid(sNumber, i + 1, 3) = "000" Then i = i + 3
If Mid(sNumber, i + 1, 3) = "000" Then i = i + 3
If Mid(sNumber, i + 1, 3) = "000" Then i = i + 3
Case 6
mTemp = mTemp & " triệu"
If Mid(sNumber, i + 1, 3) = "000" Then i = i + 3
If Mid(sNumber, i + 1, 3) = "000" Then i = i + 3
Case 3
mTemp = mTemp & " nghìn"
If Mid(sNumber, i + 1, 3) = "000" Then i = i + 3
Case Else
Select Case (mLen - i) Mod 3
Case 2
mTemp = mTemp & " trăm"
Case 1
mTemp = mTemp & " mươi"
End Select
End Select
Next
'Loại bỏ trường hợp x00
mTemp = Replace(mTemp, "không mươi không", "")
'Loại bỏ trường hợp 00x
mTemp = Replace(mTemp, "không mươi ", "linh ")
'Loại bỏ trường hợp x0, x>=2
mTemp = Replace(mTemp, "mươi không", "mươi")
'Fix trường hợp 10
mTemp = Replace(mTemp, "một mươi", "mười")
'Fix trường hợp x4, x>=2
mTemp = Replace(mTemp, "mươi bốn", "mươi tư")
'Fix trường hợp x04
mTemp = Replace(mTemp, "linh bốn", "linh tư")
'Fix trường hợp x5, x>=2
mTemp = Replace(mTemp, "mươi năm", "mươi nhăm")
'Fix trường hợp x1, x>=2
mTemp = Replace(mTemp, "mươi một", "mươi mốt")
'Fix trường hợp x15
mTemp = Replace(mTemp, "mười năm", "mười lăm")
'Bỏ ký tự space
mTemp = Trim(mTemp)
'Ucase ký tự đầu tiên
Return UCase(Left(mTemp, 1)) & Mid(mTemp, 2)
End Function
Crystal:'Hàm đọc số thành chữ cú pháp Crystal Report
'21.12.2010
'Sưu tầm by tihonphysics
Dim SoInput As String
SoInput=Replace (CStr ({@tongcongtienthanhtoan}),"," ,"" ) 'thay thế dấu phẩy (,) thành khoảng trắng
Dim SoInputTemp As String
SoInputTemp=SoInput
Dim KetQua As String, SoTien As String, Nhom As String, Dich As String
Dim Chu As String, S1 As String, S2 As String, S3 As String
Dim i , j , Vitri , S
Dim Hang, Doc, Dem
Dim KHONG_DONG,SO_LON,TRU,TRAM,MUOI,GIDO,NGANTY,TY,TRIEU,NGAN,DONG,XU
Dim MOT, HAI, BA, BON, NAM, SAU, BAY, TAM, CHIN ,CHAN, LE, MUOIMOT, MUOIMOTT
KHONG_DONG = "không đồng"
SO_LON = "số quá lớn"
TRU = "âm"
TRAM = "trăm"
MUOI = "mười"
GIDO = "gì đó"
NGANTY = "ngàn tỷ"
TY = "tỷ"
TRIEU = "triệu"
NGAN = "ngàn"
DONG = "đồng"
XU = "xu"
MOT = "một"
HAI = "hai"
BA = "ba"
BON = "bốn"
NAM = "năm"
SAU = "sáu"
BAY = "bảy"
TAM = "tám"
CHIN = "chín"
CHAN = "chẵn"
LE = "lẽ"
MUOIMOT = "mười một"
MUOIMOTT = "mươi mốt"
If CDbl(SoInput) = 0 Then
formula = KHONG_DONG
Else
If Abs(CDbl(SoInput)) >= 1000000000000000 Then
formula = SO_LON
Else
'If CDbl(SoInput) <= 0 Then
' SoInput = TRU & Space(1)
'End If
SoTien = ToText(Abs(CDbl(SoInput)),"####################0.00")
SoTien = Right(Space(15) & SoTien, 18)
Hang = Array(TRAM, MUOI, GIDO)
Doc = Array(NGANTY, TY, TRIEU, NGAN, DONG, XU)
Dem = Array(MOT, HAI, BA, BON, NAM, SAU, BAY, TAM, CHIN)
For i = 1 To 6
Nhom = Mid(SoTien, i * 3 - 2, 3)
If Nhom <> Space(3) Then
Select Case Nhom
Case "000"
If i = 5 Then
Chu = DONG & Space(1)
Else
Chu = Space(0)
End If
Case ".00", ",00"
Chu = CHAN
Case Else
S1 = Left(Nhom, 1)
S2 = Mid(Nhom, 2, 1)
S3 = Right(Nhom, 1)
Chu = Space(0)
Hang(3) = Doc(i)
For j = 1 To 3
Dich = Space(0)
S = Val(Mid(Nhom, j, 1))
If S > 0 Then
Dich = Dem(S) & Space(1) & Hang(j) & Space(1)
End If
Select Case j
Case 2
if S = 1 then Dich = MUOI & Space(1)
if S = 0 And S3 <> "0" then
If ((S1 >= "1") And (S1 <= "9")) Or ((S1 = "0") And (i = 4)) Then
Dich = LE & Space(1) End If
end if
Case 3
If S = 0 And Nhom <> Space(2) & "0" then Dich = Hang(j) & Space(1)
If (S = 5 And S2 <> Space(1) And S2 <> "0") then
Dich = "l" & Mid(Dich, 2)
End If
End Select
Chu = Chu & Dich
Next j
End Select
Vitri = InStr(1, Chu, MUOIMOT, 1)
'If Vitri > 0 Then Mid(Chu, Vitri, 9) = MUOIMOTT
KetQua = KetQua & Chu
End If
Next i
End If
End If
Dim x As String
If CDbl(SoInputTemp) <= 0 Then
x = TRU & Space(1)
x=UCase(Left(x,1)) & Mid(x,2)
else
x=""
End If
if x<>"" then
formula = x & KetQua
else
formula=UCase(Left(KetQua, 1)) & Mid(KetQua, 2)
end if
No comments:
Post a Comment