شما می توانید از تابع FormatNumber استفاده کنید که یک عدد را بصورت رشته String بر می گرداند.
پارامتر اول این تابع مقدار عددی خواهد بود که قرار است برگردانده شود، مثلا :
کد:
[B]FormatNumber[/B](123456)
[B]FormatNumber[/B](3.14)
[B]FormatNumber[/B](MyNumber)
[B]FormatNumber[/B](Val(Text1.Text))
پارامتر دوم این تابع تعداد رقمهای بعد از ممیز (اعشاری) را مشخص می کند که می تواند 0 هم باشد. مثلا :
کد:
[B]FormatNumber[/B](3.14, 2)
[B]FormatNumber[/B](MyNumber, 0)
[B]FormatNumber[/B](Val(Text1.Text), 4)
برای آنکه رقم ها سه تا سه تا جدا شوند پارامترهای سوم الی پنجم را اینگونه مشخص نمایید (فرض کنیم که n عدد
مورد نظر و m تعداد رقمهای بعد از اعشار باشد :
کد:
FormatNumber([B]n[/B], [B]m[/B], vbFalse, vbFalse, vbTrue)
در مثال زیر ما عدد 12345678 را سه رقم سه رقم جدا کرده و در یک پنجره MessageBox نمایش می دهیم :
کد:
Private Sub Form_Load()
Dim I As Double
I = 12345678
MsgBox [B]FormatNumber[/B](I, 0, vbFalse, vbFalse, vbTrue)
End Sub
در مثال زیر ما مقدار عددی درون کنترل TextBox ای با نام Text1 را سه رقم سه رقم جدا کرده و در درون
TextBox دیگری با نام Text2 کپی می کنیم :
کد:
Text2.Text = [B]FormatNumber[/B](Val(Text1.Text), 0, vbFalse, vbFalse, vbTrue)
عیب این تابع FormatNumber این است که همیشه تعداد رقم های بعد از اعشار ثابتی خواهد داشت.
مثلا اگر مقدار پارامتر دوم 0 باشد عدد 3.14 را 3 بر می گرداند و اگر پارامتر دوم 3 باشد عدد 1234 را 1,234.000 نشان میدهد.
برای رفع این مشکل می توانید از یک تابع اختصاصی استفاده کنید :
کد:
Private Function [B]GroupDigits[/B](ByVal Number As Variant) As String
Dim Pos As Long
GroupDigits = Format(Number, "###,###,###,##0.##########")
If Right(GroupDigits, 1) = "." Then
GroupDigits = Left(GroupDigits, Len(GroupDigits) - 1)
End If
End Function
این تابع GroupDigits تنها یک ورودی دارد که همان عددی است که قرار است برگردانده شود.
مزیت این تابع اختصاصی در این است که اعداد اعشاری را با تعداد رقم های بعد از اعشار موجود نشان داده
(تا 10 رقم بعد از اعشار را نمایش می دهد) و اعداد غیر اعشاری را بدون ممیز بر می گرداند.
مثلا عدد 3.14 را 3.14 بر می گرداند و عدد 1234 را 1,234 نشان میدهد.