jeck09nt > 20-09-16, 10:11 AM
vuthaiha90 > 07-11-16, 11:23 AM
(16-09-16, 04:43 PM)maidinhdan Đã viết:(16-09-16, 10:05 AM)ledangvan Đã viết: Cảm ơn Nguyen Hoang Diep
Tuy nhiên kết quả dịch ra chưa được theo ý muốn, ví dụ : 12800,4 kết quả dịch ra là : Mười hai nghìn tám trăm phẩy bốn mươi đồng.
Mình muốn kết quả dịch là : Mười hai nghìn, tám trăm phẩy bốn đồng. (Tách dấu phẩy và phần sau dấu phẩy thể hiện là phẩy bốn chứ không phải phẩy bốn mươi)
Rất mong bạn trợ giúp
Xin tham gia 1 bài:
Gửi anh Code này:
Mã PHP:Public Function Docso2(Number As Double)
Dim MyArray
Dim Str As String
If Number >= 1E+18 Then Docso2 = "#NUM!": Exit Function
Str = Format(Fix(Abs(Number)), "000000000000000000")
MyArray = Array("không ", "m" & ChrW(7897) & "t ", "hai ", "ba ", "b" & ChrW(7889) & "n ", "n" & ChrW(259) & "m ", "sáu ", "b" & ChrW(7843) & "y ", "tám ", "chín ", "tri" & ChrW(7879) & "u, ", "ngàn, ", "t" & ChrW(7927) & ", ", "tri" & ChrW(7879) & "u, ", "ngàn, ", "", "tr" & ChrW(259) & "m ", "m" & ChrW(432) & ChrW(417) & "i ", "không " & "m" & ChrW(432) & ChrW(417) & "i" & " không ", "không " & "m" & ChrW(432) & ChrW(417) & "i", "l" & ChrW(7867), "m" & ChrW(432) & ChrW(417) & "i" & " không", "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " n" & ChrW(259) & "m", "m" & ChrW(432) & ChrW(417) & "i" & " l" & ChrW(259) & "m", "m" & ChrW(7897) & "t " & "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(7901) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7897) & "t", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7889) & "t", "Âm ", ChrW(273) & ChrW(7891) & "ng ", " ph" & ChrW(7849) & "y ", "xu ")
For i = 1 To Len(Str)
If Left(Str, i) <> 0 And Mid(Str, (Int((i + 2) / 3) - 1) * 3 + 1, 3) <> 0 Then
Docso2 = Docso2 & MyArray(Mid(Str, i, 1)) & MyArray(-(9 + i / 3) * (i Mod 3 = 0) - (15 + i Mod 3) * (i Mod 3 <> 0))
ElseIf i = 9 And Mid(Str, 7, 3) = 0 And Left(Str, 6) <> 0 Then
Docso2 = Docso2 & MyArray(12)
End If
Next
Docso2 = IIf(Number = 0, MyArray(0) & MyArray(30), "") & IIf(Fix(Number) <> 0, Docso2 & MyArray(30), "") & IIf(Fix(Number) <> 0 And Fix(Number) <> Number, MyArray(31), "") & IIf(Fix(Number) <> Number, IIf(Abs(Number - Fix(Number)) < 0.1, "", MyArray(Left(Right(Format(Abs(Number), "#.00"), 2), 1)) & MyArray(17)) & MyArray(Right(Format(Number, "#.00"), 1)) & MyArray(32), "")
Docso2 = Replace(Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Docso2, MyArray(18), MyArray(15)), MyArray(19), MyArray(20)), MyArray(21), MyArray(22)), MyArray(23), MyArray(24)), MyArray(25), MyArray(26)), MyArray(27), MyArray(28)), ", " & MyArray(30), " " & MyArray(30))), MyArray(30) & MyArray(31), Split(MyArray(30), " ")(0) & " " & MyArray(31))
If Number < 0 Then Docso2 = MyArray(29) & Docso2
Docso2 = UCase(Left(Docso2, 1)) & Mid(Docso2, 2) & "."
End Function
Ví dụ:
+ 100,000,500.25 : Một trăm triệu, năm trăm đồng phẩy hai mươi lăm xu.
+ 10,250,000.51 : Mười triệu, hai trăm năm mươi ngàn đồng phẩy năm mươi mốt xu.
+ 10,500.20 : Mười ngàn, năm trăm đồng phẩy hai mươi xu. ( Trường hợp .20 Xu không muốn hiện chữ " hai mươi xu" thì thay đoạn cuối cùng Mid(Docso2, 2) = > Mid(Docso2, 1) nhưng phải chèn thêm hàm if cho tương xứng khi bắt điều kiện
Chú ý dòng: MyArray = Array... ( Mãng MyArray có tất cả 31 phần tử. thứ tự thì anh tự tùy biến dựa vào 31 phần tử này), Theo mình với đoạn code này nên thay phần tử thứ 30 (" ph" & ChrW(7849) & "y ") thành chữ "và " là hay nhất. Và nó sẽ cho kết quả như sau:
+ 1,005,000.13 : Một triệu, không trăm lẻ năm ngàn đồng và mười ba xu.
+ 12,800.40 : Mười hai ngàn, tám trăm đồng và bốn mươi xu.
Thân mến!
maidinhdan > 07-11-16, 03:56 PM
(07-11-16, 11:23 AM)vuthaiha90 Đã viết: Bác Dân ơi, em xin phép lục lại bài này, code trên em sửa lại một chút để đọc thành mét vuông (không dùng chữ "đồng" và chữ "xu") nhưng bị vướng 1 chỗ là khi đọc số ví dụ như 100,25 thì đọc đúng là một trăm phẩy hai mươi lăm nhưng diện tích của em nhiều khi là VD: 156,8 thì nó đọc là một trăm năm mươi sáu phẩy tám mươi. Em muốn bỏ chữ mươi kia đi khi mà có 1 số thập phân, còn 2 số thập phân vẫn đọc nguyên như cũ. Mà không biết sửa vào chỗ nào. Bác sửa code lại hộ em được không
Trích dẫn: Ví trí
Phần tử 1[không ] 0
Phần tử 2[một ] 1
Phần tử 3[hai ] 2
Phần tử 4[ba ] 3
Phần tử 5[bốn ] 4
Phần tử 6[năm ] 5
Phần tử 7[sáu ] 6
Phần tử 8[bảy ] 7
Phần tử 9[tám ] 8
Phần tử 10[chín ] 9
Phần tử 11[triệu, ] 10
Phần tử 12[ngàn, ] 11
Phần tử 13[tỷ, ] 12
Phần tử 14[triệu, ] 13
Phần tử 15[ngàn, ] 14
Phần tử 16[] 15
Phần tử 17[trăm ] 16
Phần tử 18[mươi ] 17
Phần tử 19[không mươi không ] 18
Phần tử 20[không mươi] 19
Phần tử 21[lẻ] 20
Phần tử 22[mươi không] 21
Phần tử 23[mươi] 22
Phần tử 24[mươi năm] 23
Phần tử 25[mươi lăm] 24
Phần tử 26[một mươi] 25
Phần tử 27[mười] 26
Phần tử 28[mươi một] 27
Phần tử 29[mươi mốt] 28
Phần tử 30[Âm ] 29
Phần tử 31[đồng ] 30
Phần tử 32[ phẩy ] 31
Phần tử 33[xu ] 32