تفقيط الأرقام العشرية بالانكليزية - abuzzouz - 18-07-14
السلام عليكم،،
أخواني الأفاضل لدي كود يسمح بتفقيط الأرقام الصحيحة فقط أما الأرقام العشرية(مثال: 952364879.75) فلا يدعمها
لذا أرجو منكم المساعدة أو الإرشاد للوصول إلى الكود المطلوب
مع جزيل الشكر
مرفق الكود القديم
كود :
Public Class NumeriCon
Public Shared Function ConvertNum(ByVal Input As Long) As String 'Call this function passing the number you desire to be changed
Dim output As String = Nothing
If Input < 1000 Then
output = FindNumber(Input) 'if its less than 1000 then just look it up
Else
Dim nparts() As String 'used to break the number up into 3 digit parts
Dim n As String = Input 'string version of the number
Dim i As Long = Input.ToString.Length 'length of the string to help break it up
Do Until i - 3 <= 0
n = n.Insert(i - 3, ",") 'insert commas to use as splitters
i = i - 3 'this insures that we get the correct number of parts
Loop
nparts = n.Split(",") 'split the string into the array
i = Input.ToString.Length 'return i to initial value for reuse
Dim p As Integer = 0 'p for parts, used for finding correct suffix
For Each s As String In nparts
Dim x As Long = CLng(s) 'x is used to compare the part value to other values
p = p + 1
If p = nparts.Length Then 'if p = number of elements in the array then we need to do something different
If x <> 0 Then
If CLng(s) < 100 Then
output = output & " And " & FindNumber(CLng(s)) ' look up the number, no suffix
Else ' required as this is the last part
output = output & " " & FindNumber(CLng(s))
End If
End If
Else 'if its not the last element in the array
If x <> 0 Then
If output = Nothing Then 'we have to check this so we don't add a leading space
output = output & FindNumber(CLng(s)) & " " & FindSuffix(i, CLng(s)) 'look up the number and suffix
Else 'spaces must go in the right place
output = output & " " & FindNumber(CLng(s)) & " " & FindSuffix(i, CLng(s)) 'look up the snumber and suffix
End If
End If
End If
i = i - 3 'reduce the suffix counter by 3 to step down to the next suffix
Next
End If
Return output
End Function
Private Shared Function FindNumber(ByVal Number As Long) As String
Dim Words As String = Nothing
Dim Digits() As String = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", _
"Eight", "Nine", "Ten"}
Dim Teens() As String = {"", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", _
"Eighteen", "Nineteen"}
If Number < 11 Then
Words = Digits(Number)
ElseIf Number < 20 Then
Words = Teens(Number - 10)
ElseIf Number = 20 Then
Words = "Twenty"
ElseIf Number < 30 Then
Words = "Twenty " & Digits(Number - 20)
ElseIf Number = 30 Then
Words = "Thirty"
ElseIf Number < 40 Then
Words = "Thirty " & Digits(Number - 30)
ElseIf Number = 40 Then
Words = "Fourty"
ElseIf Number < 50 Then
Words = "Fourty " & Digits(Number - 40)
ElseIf Number = 50 Then
Words = "Fifty"
ElseIf Number < 60 Then
Words = "Fifty " & Digits(Number - 50)
ElseIf Number = 60 Then
Words = "Sixty"
ElseIf Number < 70 Then
Words = "Sixty " & Digits(Number - 60)
ElseIf Number = 70 Then
Words = "Seventy"
ElseIf Number < 80 Then
Words = "Seventy " & Digits(Number - 70)
ElseIf Number = 80 Then
Words = "Eighty"
ElseIf Number < 90 Then
Words = "Eighty " & Digits(Number - 80)
ElseIf Number = 90 Then
Words = "Ninety"
ElseIf Number < 100 Then
Words = "Ninety " & Digits(Number - 90)
ElseIf Number < 1000 Then
Words = Number.ToString
Words = Words.Insert(1, ",")
Dim wparts As String() = Words.Split(",")
Words = FindNumber(wparts(0)) & " " & "Hundred"
Dim n As String = FindNumber(wparts(1))
If CLng(wparts(1)) <> 0 Then
Words = Words & " And " & n
End If
End If
Return Words
End Function
Private Shared Function FindSuffix(ByVal Length As Long, ByVal l As Long) As String
Dim word As String
If l <> 0 Then
If Length > 12 Then
word = "Trillion"
ElseIf Length > 9 Then
word = "Billion"
ElseIf Length > 6 Then
word = "Million"
ElseIf Length > 3 Then
word = "Thousand"
ElseIf Length > 2 Then
word = "Hundred"
Else
word = ""
End If
Else
word = ""
End If
Return word
End Function
End Class
RE: تفقيط الأرقام العشرية بالانكليزية - silverlight - 18-07-14
يمكنك أن تستخدم .... String.Format فهي الأسهل و الأفضل
RE: تفقيط الأرقام العشرية بالانكليزية - abuzzouz - 18-07-14
أرجو التوضيح أكثر أخي العزيز silverlight
RE: تفقيط الأرقام العشرية بالانكليزية - silverlight - 18-07-14
الكود سيكون شئ من هذا القبيل
كود :
String.Format("{0:#,###0}", 19988888779)
ف اللينك التالي ستجد بعض الأفكار أيضا
اللينك
RE: تفقيط الأرقام العشرية بالانكليزية - abuzzouz - 18-07-14
شكرا جزيلا اخي silverlight فهمت قصدك، إلا أن الموضوع لا يتعلق بتنسيق الرقم فالرقم أريده عشريا كما هو وأطبق عليه كود التفقيط
بحثت جاهدا عبر النت للتوصل الى ذلك ولم أجد سوى تفقيط باللغة العربية او تفقيط انكليزي بلغة برمجة أخرى غير vb.net
لذا أرجو المساعدة جزاكم الله خيرا
RE: تفقيط الأرقام العشرية بالانكليزية - silverlight - 18-07-14
الأن انا فهمت ما تقصده أنت ......ما تريده ب التفقيط هو كتابة الارقام كالتالي مثلا 1000120 تُكتب مليون و مائة و عشرون........اعتقد الكود موجود ف الموقع القديم و إن لم تجده سأضعه لك لاحقا
RE: تفقيط الأرقام العشرية بالانكليزية - vbnet - 18-07-14
.....
أضف هذه الدالة إلى الكلاس NumeriCon، ولو قمت بتغيير نوع تصريح الدالة ConvertNum من Public إلى Private يكون أفضل
كود :
Public Shared Function ConvertNumber(ByVal Input As Double) As String
Dim _num As String = Input.ToString
Dim _int As String = ConvertNum(System.Math.Floor(Input))
Dim _dec As String = String.Empty
If _num.Contains(".") Then
_dec = ConvertNum(CLng(_num.ToString.Substring(_num.IndexOf(".") + 1)))
End If
Return _int & IIf(_dec <> "", " Point " & _dec, "")
End Function
وعند التحويل استخدم الدالة ConvertNumber بدلا من الدالة ConvertNum مثال
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.TextBox2.Text = ConvertNumber(Me.TextBox1.Text)
End Sub
.....
RE: تفقيط الأرقام العشرية بالانكليزية - abuzzouz - 19-07-14
شكراً جزيلاً أخي العزيز vb.net أحسن الله إليك كما أحسنت إلي وجعل الله ذلك في ميزان حسناتك
لوتكرمت لدي طلب آخر بسيط بالنسبة لك لأنهي مشروعي الصغير حيث أن لي سؤال قد طرحته في قسم أسئلة التقارير والطباعة ولم أجد رداً عليه
http://vb4arb.com/vb/thread-3499.html
مع كل الشكر والتقدير لكم أخي العزيز
RE: تفقيط الأرقام العشرية بالانكليزية - abuzzouz - 19-07-14
- هل يمكن تفقيط كسور الرقم على الشكل التالي (مثال: 2530.26)
Two thousand Five Handred Thirty and 26/100 بدلاً من Two thousand Five Handred Thirty and Twenty Six
- كذلك هل يمكن تحديد عدد الأرقام بعد الفاصلة بحيث لا يمكن للمستخدم كتابة أكثر من رقمين بعدها
وشكرا جزيلاً على رحابة صدرك
RE: تفقيط الأرقام العشرية بالانكليزية - vbnet - 20-07-14
.....
ConvertNumber2
كود :
Public Shared Function ConvertNumber2(ByVal Input As Double) As String
Dim _num As String = Input.ToString
Dim _int As String = ConvertNum(System.Math.Floor(Input))
Dim _dec As String = String.Empty
If _num.Contains(".") Then
_dec = _num.ToString.Substring(_num.IndexOf(".") + 1)
End If
Return _int & IIf(_dec <> "", " And " & _dec & "/100", "")
End Function
.....
|