PDA

View Full Version : کمپونتی برای تبدیل ارقام از عدد به حروف



Masoome_das
چهارشنبه 23 تیر 1389, 17:11 عصر
به کمک این کلاس می توانید متغیرهایی از نوع int , string , Decimal
را از حالت عددی به حروف تبدیل کرد این کلاس تا اعداد 5 رقمی (0-99999) را قابلیت تبدیل دارد
فکر کنم برای زیبا تر شدن پروژه هاتون مفید باشه به خصوص در حالتی که در برنامه ها اعداد فارسی را به صورت لاتین نمایش می دهد یک کار همیشگی باشه
اگر در عدد خاصی دچار مشکل شد به من اطلاع دهید
Help داخل پوشه است

salehbagheri
چهارشنبه 23 تیر 1389, 18:53 عصر
همیشه سعی کنید سورسش رو در اختیار عموم قرار بدید. (اجرش بیشتره)

این یه کلاس ساده و قدرتمند اما به زبان VB هست! کافیه به C#‎ تبدیلش کنید و استفاده ببرید.

تا هزارمیلیارد قابلیت تبدیل داره!


Public Class NumToStr
Private Class Numbers
Public intNum As Integer
Public strNum As String
Sub New(ByVal int As Integer, ByVal str As String)
intNum = int
strNum = str
End Sub
End Class
Private listOFNumbers() As Numbers = {New Numbers(1, "يك"), New Numbers(2, "دو"), New Numbers(3, "سه"), New Numbers(4, "چهار"), New Numbers(5, "پنج"), New Numbers(6, "شش") _
, New Numbers(7, "هفت"), New Numbers(8, "هشت"), New Numbers(9, "نه"), New Numbers(10, "ده"), New Numbers(11, "يازده"), New Numbers(12, "دوازده") _
, New Numbers(13, "سيزده"), New Numbers(14, "چهارده"), New Numbers(15, "پانزده"), New Numbers(16, "شانزده"), New Numbers(17, "هفده"), New Numbers(18, "هجده") _
, New Numbers(19, "نوزده"), New Numbers(20, "بيست"), New Numbers(30, "سي"), New Numbers(40, "چهل"), New Numbers(50, "پنجاه"), New Numbers(60, "شصت"), New Numbers(70, "هفتاد") _
, New Numbers(80, "هشتاد"), New Numbers(90, "نود"), New Numbers(100, "صد"), New Numbers(200, "دويست"), New Numbers(300, "سيصد"), New Numbers(400, "چهارصد"), New Numbers(500, "پانصد") _
, New Numbers(600, "ششصد"), New Numbers(700, "هفتصد"), New Numbers(800, "هشتصد"), New Numbers(900, "نهصد")}
Public Function GetStringOfNumber(ByVal num As Long) As String
Dim Part() As String = Split(FormatNumber(num, 0), ",")
Select Case Part.Length
Case Is = 1 And Not CInt(Part(0)) = 0
Return GetThree(Part(0))
Case Is = 2
If CInt(Part(1)) = 0 Then
Return GetThree(Part(0)) & " هزار " : Else
Return GetThree(Part(0)) & " هزار و " & GetThree(Part(1))
End If
Case Is = 3
If CInt(Part(1)) + CInt(Part(2)) = 0 Then
Return GetThree(Part(0)) & " ميليون " : Else
Return GetThree(Part(0)) & " ميليون و " & GetStringOfNumber(Part(1) & Part(2))
End If
Case Is = 4
If CInt(Part(1)) + CInt(Part(2)) + CInt(Part(3)) = 0 Then
Return GetThree(Part(0)) & " ميليارد " : Else
Return GetThree(Part(0)) & " ميليارد و " & GetStringOfNumber(Part(1) & Part(2) & Part(3))
End If
Case Is = 5
If CInt(Part(1)) + CInt(Part(2)) + CInt(Part(3)) + CInt(Part(4)) = 0 Then
Return GetThree(Part(0)) & " بيليون " : Else
Return GetThree(Part(0)) & " بيليون و " & GetStringOfNumber(Part(1) & Part(2) & Part(3) & Part(4))
End If
End Select
Return Nothing
End Function
Private Function GetThree(ByVal Num As Integer) As String
Select Case Num
Case Is < 10
Return Search(Num)
Case Is < 100
If Num <= 20 Or (Num Mod 10) = 0 Then
Return Search(Num) : Else
Return Search((Math.Floor(Num / 10)) * 10) & " و " & Search(Num - ((Math.Floor(Num / 10)) * 10))
End If
Case Is < 1000
If Num Mod 100 = 0 Then
Return Search(Num) : Else
Return Search((Math.Floor(Num / 100)) * 100) & " و " & GetThree(Num - ((Math.Floor(Num / 100)) * 100))
End If
End Select
Return Nothing
End Function
Private Function Search(ByVal Num As Integer) As String
For i As Integer = 0 To listOFNumbers.Length - 1
If listOFNumbers(i).intNum = Num Then Return listOFNumbers(i).strNum
Next
Return Nothing
End Function
End Class


کد توسط کاربر توانا : mostafaaa (http://barnamenevis.org/forum/member.php?u=53462)

Masoome_das
چهارشنبه 23 تیر 1389, 19:36 عصر
این هم سورس برنامه

Masoome_das
پنج شنبه 24 تیر 1389, 00:50 صبح
همیشه سعی کنید سورسش رو در اختیار عموم قرار بدید. (اجرش بیشتره)

این یه کلاس ساده و قدرتمند اما به زبان VB هست! کافیه به C#‎‎ تبدیلش کنید و استفاده ببرید.

تا هزارمیلیارد قابلیت تبدیل داره!


من با کد های vB خیلی آشنا نیستم
آیا کد بالا برای اعداد با رنج های مختلف تست شده است؟
من احساس می کنم در یک قسمت از اعداد مثل 160014 دچار مشکل بشود
البته بازهم تاکید می کنم من توهین به برنامه کسی نمی کنم و این را هم از جنبه رفع ابهام پرسیدم.

salehbagheri
پنج شنبه 24 تیر 1389, 12:45 عصر
برای رفع ابهامات این دمو رو اینجا قرار میدم.