Masoome_das
چهارشنبه 23 تیر 1389, 18:11 عصر
به کمک این کلاس می توانید متغیرهایی از نوع int , string , Decimal 
را از حالت عددی به حروف تبدیل کرد این کلاس تا اعداد 5 رقمی (0-99999) را قابلیت تبدیل دارد
فکر کنم برای زیبا تر شدن پروژه هاتون مفید باشه به خصوص در حالتی که در برنامه ها اعداد فارسی را به صورت لاتین نمایش می دهد یک کار همیشگی باشه
اگر در عدد خاصی دچار مشکل شد به من اطلاع دهید
Help داخل پوشه است
salehbagheri
چهارشنبه 23 تیر 1389, 19: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, 20:36 عصر
این هم سورس برنامه
Masoome_das
پنج شنبه 24 تیر 1389, 01:50 صبح
همیشه سعی کنید سورسش رو در اختیار عموم قرار بدید. (اجرش بیشتره)
این یه کلاس ساده و قدرتمند اما به زبان VB هست! کافیه به C# تبدیلش کنید و استفاده ببرید.
تا هزارمیلیارد قابلیت تبدیل داره!
من با کد های vB خیلی آشنا نیستم
 آیا کد بالا برای اعداد با رنج های مختلف تست شده است؟
 من احساس می کنم در یک قسمت از اعداد مثل 160014 دچار مشکل بشود
البته بازهم تاکید می کنم من توهین به برنامه کسی نمی کنم  و این را هم از جنبه رفع ابهام پرسیدم.
salehbagheri
پنج شنبه 24 تیر 1389, 13:45 عصر
برای رفع ابهامات این دمو رو اینجا قرار میدم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.