رفتن به مطلب
  • 0

جدا کردن سه رقمی اعداد در b4a


raminkian

سوال

سلام دوستان

من یه ادیت تکست دارم که از کاربر مبلغ میگیره میخوام وقتی وارد کرد سه رقم سه رقم جدا کنه

تاپیک های مشابه هم تو سایت دیدم اما هیچکدوم کمکم نکرد

ممنون میشم کمکم کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

12 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام 

این تایپیکهای زیر که حتی سورس آماده درونشون ارائه شده چه مشکلی دارند؟ که مشکل شما رو حل نکرده اند؟!

 

سوای مطالب خوب این تایپیکها ، فقط یک نکته رو حتما توجه کنید که: در قسمت Sub edittext1_TextChanged    حتما یک متغییر دوم ،جدا تعریف کنید که 

عدد ورقم اصلی وارد شده را بدون کاراکترهای متنی اعم از (. ، /  ....) در خود ذخیره کند وبااینکه این متغییر متنی حاوی عدد نمایش داده نمی شود

ولی از این متغییر مخفی در محاسباتتان استفاده کنید که برنامه ارور ندهد و بتوانید به راحتی از متغییر متنی شامل اعداد در محاسبات عددیتان استفاده نمایید

والا چون عدد نمایش داده در جعبه تکست باکس شامل کاراکترهای متنی می شود، نمی شوداز آن در کارهای محاسباتی عددی استفاده کردومتغییر قابل تغییر به نوع Int نمی باشد .   

 

 

 

 

:cheshmak::fekr: البته یادمه اون قدیم قدیما در QBasic  از دستور PRINT USING a$;adad      که $a مساوی قالبهای اینچنینی بود "###.###.###,###" یا ",######" استفاده میشد ، که خودکار برنامه اعداد رو سه رقم جداشده با کاراکتر دلخواه نمایش میداد  ،البته ظاهرا  توی بیسیک فور هم هست 

اسم کتابخانه اش هست  (Masked EditText) توی این لینک زیر براتون پیدا کردم ببینید به دردتان میخوره یانه !

 

B4A Library - Mask V1.0.0 | B4X Community - Android, iOS, desktop, server and IoT programming tools

B4A Library - [Lib] Masked EditText | B4X Community - Android, iOS, desktop, server and IoT programming tools

 

البته الان بعدقرار دادن لینک بالا ، دیدم که جناب phd.khosraviتوی تایپیک سوم هم در آخر بهش اشاره کرده!.

____________________________

در لینک زیر کتابخانه و سورس آماده آن قرار داده شدکه واسه جدا کردن (دوتا دوتا وجداکردن اعداد تاریخ و ساعت و ایمیل وتشخیص صحیح واشتباه بودن آنها

و یا برای مولتی لاین و متن hint متحرک و متن فقط خواندنی در ادیت تکست edit text read only ) درش مثال آورده شده:

 

کتابخانه و سورس Masked EditText 1.52 

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/09/11, 04:37:16، نورنما گفته است :

سلام 

این تایپیکهای زیر که حتی سورس آماده درونشون ارائه شده چه مشکلی دارند؟ که مشکل شما رو حل نکرده اند؟!

 

سوای مطالب خوب این تایپیکها ، فقط یک نکته رو حتما توجه کنید که: در قسمت Sub edittext1_TextChanged    حتما یک متغییر دوم ،جدا تعریف کنید که 

عدد ورقم اصلی وارد شده را بدون کاراکترهای متنی اعم از (. ، /  ....) در خود ذخیره کند وبااینکه این متغییر متنی حاوی عدد نمایش داده نمی شود

ولی از این متغییر مخفی در محاسباتتان استفاده کنید که برنامه ارور ندهد و بتوانید به راحتی از متغییر متنی شامل اعداد در محاسبات عددیتان استفاده نمایید

والا چون عدد نمایش داده در جعبه تکست باکس شامل کاراکترهای متنی می شود، نمی شوداز آن در کارهای محاسباتی عددی استفاده کردومتغییر قابل تغییر به نوع Int نمی باشد .   

 

 

 

 

:cheshmak::fekr: البته یادمه اون قدیم قدیما در QBasic  از دستور PRINT USING a$;adad      که $a مساوی قالبهای اینچنینی بود "###.###.###,###" یا ",######" استفاده میشد ، که خودکار برنامه اعداد رو سه رقم جداشده با کاراکتر دلخواه نمایش میداد  ،البته ظاهرا  توی بیسیک فور هم هست 

اسم کتابخانه اش هست  (Masked EditText) توی این لینک زیر براتون پیدا کردم ببینید به دردتان میخوره یانه !

 

B4A Library - Mask V1.0.0 | B4X Community - Android, iOS, desktop, server and IoT programming tools

B4A Library - [Lib] Masked EditText | B4X Community - Android, iOS, desktop, server and IoT programming tools

 

البته الان بعدقرار دادن لینک بالا ، دیدم که جناب phd.khosraviتوی تایپیک سوم هم در آخر بهش اشاره کرده!.

____________________________

در لینک زیر کتابخانه و سورس آماده آن قرار داده شدکه واسه جدا کردن (دوتا دوتا وجداکردن اعداد تاریخ و ساعت و ایمیل وتشخیص صحیح واشتباه بودن آنها

و یا برای مولتی لاین و متن hint متحرک و متن فقط خواندنی در ادیت تکست edit text read only ) درش مثال آورده شده:

 

کتابخانه و سورس Masked EditText 1.52 

 

 

سلام راجع به این توضیحات بالاتون (

فقط یک نکته رو حتما توجه کنید که: در قسمت Sub edittext1_TextChanged    حتما یک متغییر دوم ،جدا تعریف کنید که 

عدد ورقم اصلی وارد شده را بدون کاراکترهای متنی اعم از (. ، /  ....) در خود ذخیره کند وبااینکه این متغییر متنی حاوی عدد نمایش داده نمی شود)

می تونید یه مثال عملی (قطعه کد) بگید. من دقیقا همین مشکلو دارم... محاسبات اعداد سه رقم سه رقم شده در ادیت تکست.

سپاس از شما

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

راجع به مشکلتون خب به تایپیکهای بالاکه ارسال کرده بودم یک نگاه گذرا می فرمودید، قطعه کد هم اونجا پیدا می فرمودید!

بااین حال بفرمایید،این تایپیک زیر که قطعه کدهم داره خدمتتان تقدیم میشه. (روی گزینه «پاسخ به موضوع» کلیک کنید تایپیک مربوطه روبازمیکنه)

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

راجع به مشکلتون خب به تایپیکهای بالاکه ارسال کرده بودم یک نگاه گذرا می فرمودید، قطعه کد هم اونجا پیدا می فرمودید!

بااین حال بفرمایید،این تایپیک زیر که قطعه کدهم داره خدمتتان تقدیم میشه. (روی گزینه «پاسخ به موضوع» کلیک کنید تایپیک مربوطه روبازمیکنه)

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 32 دقیقه قبل، نورنما گفته است :

سلام

راجع به مشکلتون خب به تایپیکهای بالاکه ارسال کرده بودم یک نگاه گذرا می فرمودید، قطعه کد هم اونجا پیدا می فرمودید!

بااین حال بفرمایید،این تایپیک زیر که قطعه کدهم داره خدمتتان تقدیم میشه. (روی گزینه «پاسخ به موضوع» کلیک کنید تایپیک مربوطه روبازمیکنه)

 

تمام اون مطالب رو دیدم ولی چیزی که می خواستم نبود...

و از کتابخونه maskedittext استفاده نمیکنم...

منظور بنده از ریپلای پیام شما این هست که حضرتعالی به :( مساله ای اشاره فرمودید که در تاپیک های مربوطه بحث نشده و اشاره کردید: (سوای مطالب خوب این تایپیک ها) در تکست چنج ادیت تکست حتما یک متغیر تعریف کنید و....

مشکل بنده هم همین است. در ادیت تکست چنج اعداد رو به سه رقم تبدیل کردم اما همونطور که مستحضر هستید کارکترهای تفکیک سه رقمی، استرینگ ایجاد میکنه و در محاسبه و جمع و تفریق اعداد به مشکل بر میخوره

لینک ارسال
به اشتراک گذاری در سایت های دیگر

روشش رو که عرض کردم ولی بااین وجوداشکالی نیست ، لطفا کدهاتونو ارسال کنید سرفرصت بررسی وراهنمایی انجام بشه

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

روشش رو که عرض کردم ولی بااین وجوداشکالی نیست ، لطفا کدهاتونو ارسال کنید سرفرصت بررسی وراهنمایی انجام بشه

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 52 دقیقه قبل، نورنما گفته است :

روشش رو که عرض کردم ولی بااین وجوداشکالی نیست ، لطفا کدهاتونو ارسال کنید سرفرصت بررسی وراهنمایی انجام بشه

 

Sub EditText1_TextChanged (Old As String, New As String)
	Dim D As Double
	Dim S,N,O As String
	n=New.Replace(",","")
	O=Old.Replace(",","")
	If O<>N Then
		EditText1.Text=EditText1.Text.Replace(",","")
		S=EditText1.Text
		If IsNumber(s) =True And S<>"0" Then
			D=s
			EditText1.Text=NumberFormat(D,0,0)
		End If
	End If
	EditText1.SelectionStart=EditText1.Text.Length
End Sub

خدمت شما... 

من میخام در در رویداد کلیک محاسبه ورودی ادیت تکست بدون ویرگول (جداسازی سه رقمی) در نظر گرفته بشه که مشکلی در محاسبه پیش نیاد. سپاس

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 4 دقیقه قبل، mojtaba117 گفته است :

Sub EditText1_TextChanged (Old As String, New As String)
	Dim D As Double
	Dim S,N,O As String
	n=New.Replace(",","")
	O=Old.Replace(",","")
	If O<>N Then
		EditText1.Text=EditText1.Text.Replace(",","")
		S=EditText1.Text
		If IsNumber(s) =True And S<>"0" Then
			D=s
			EditText1.Text=NumberFormat(D,0,0)
		End If
	End If
	EditText1.SelectionStart=EditText1.Text.Length
End Sub

خدمت شما... 

من میخام در در رویداد کلیک محاسبه ورودی ادیت تکست بدون ویرگول (جداسازی سه رقمی) در نظر گرفته بشه که مشکلی در محاسبه پیش نیاد. سپاس

سلام من قبلا نوشته بودم فقط یکم تغییر می خواست

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	'Activity.LoadLayout("Layout1")

	Dim l As List = change("123456789","***-***")
	For i = 0 To l.Size-1
		LogColor(l.Get(i),Colors.Yellow)
	Next
	LogColor(l.Get(1)+l.Get(2),Colors.Green)
End Sub

Sub change(number As String,format As String) As List
	Private spc(0),tx As String
	Private lis As List
	Private x As Int
	
	spc =Regex.Split("-",format)
	lis.Initialize
	
	For i = 0 To number.Length-1
		If (number.Length-1) < i+spc(x).Length Then
			tx = number.SubString2(i,number.Length)
			If(IsNumber(tx)) Then lis.Add(tx)
			Exit
		End If
		tx= number.SubString2(i,i+spc(x).Length)
		i = (i+spc(x).Length)-1
		x = x +1
		If spc.Length = x Then x = 0
		If(IsNumber(tx)) Then lis.Add(tx)
	Next
	Return lis
End Sub

تا جایی که من منظور شما رو گرفتم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 دقیقه قبل، amir54 گفته است :

سلام من قبلا نوشته بودم فقط یکم تغییر می خواست



Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	'Activity.LoadLayout("Layout1")

	Dim l As List = change("123456789","***-***")
	For i = 0 To l.Size-1
		LogColor(l.Get(i),Colors.Yellow)
	Next
	LogColor(l.Get(1)+l.Get(2),Colors.Green)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub change(number As String,format As String) As List
	Private spc(0),tx As String
	Private lis As List
	Private x As Int
	
	spc =Regex.Split("-",format)
	lis.Initialize
	
	For i = 0 To number.Length-1
		If (number.Length-1) < i+spc(x).Length Then
			tx = number.SubString2(i,number.Length)
			If(IsNumber(tx)) Then lis.Add(tx)
			Exit
		End If
		tx= number.SubString2(i,i+spc(x).Length)
		i = (i+spc(x).Length)-1
		x = x +1
		If spc.Length = x Then x = 0
		If(IsNumber(tx)) Then lis.Add(tx)
	Next
	Return lis
End Sub

تا جایی که من منظور شما رو گرفتم

سپاس از پاسخ شما

ببینید بنده مشکلی در تبدیل ندارم

4 تا ادیت تکست دارم که عملیات جمع و تفریق در رویداد باتن محاسبه انجام میشه...

ورودی ای که به ادیت تکست میدیم و اعداد با ویرگول جداسازی میشن در باتن کلیک به خطا برمیخوره (دلیلشم اینه که به عنوان عدد شناسایی نمیشن چون ویرگول دارن) 

حالا میخام بدون ویرگول و جداسازی در باتن محاسبه شناسایی بشن...

بر فرض مثال در رویداد باتن شرط گذاشتم که اگر متن ادیت تکست از عدد 1000 کمتر باشه فلان کارو بکنه منتها در اینجا به خطا برمیخوره به خاطر وجود 1,000

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 دقیقه قبل، mojtaba117 گفته است :

سپاس از پاسخ شما

ببینید بنده مشکلی در تبدیل ندارم

4 تا ادیت تکست دارم که عملیات جمع و تفریق در رویداد باتن محاسبه انجام میشه...

ورودی ای که به ادیت تکست میدیم و اعداد با ویرگول جداسازی میشن در باتن کلیک به خطا برمیخوره (دلیلشم اینه که به عنوان عدد شناسایی نمیشن چون ویرگول دارن) 

حالا میخام بدون ویرگول و جداسازی در باتن محاسبه شناسایی بشن...

بر فرض مثال در رویداد باتن شرط گذاشتم که اگر متن ادیت تکست از عدد 1000 کمتر باشه فلان کارو بکنه منتها در اینجا به خطا برمیخوره به خاطر وجود 1,000

اینطوری میشه ویلگول ها رو برداشت و چک کرد و بعدش گذاشت


	Dim number As Int
	Dim tx As String = "1,000"
	tx = tx.Replace(",","")
	If IsNumber(tx)Then number = tx

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 18 دقیقه قبل، amir54 گفته است :

اینطوری میشه ویلگول ها رو برداشت و چک کرد و بعدش گذاشت



	Dim number As Int
	Dim tx As String = "1,000"
	tx = tx.Replace(",","")
	If IsNumber(tx)Then number = tx

 

عالی بود... سپاس از هر دو بزرگوار

لینک ارسال
به اشتراک گذاری در سایت های دیگر

منم ممنونم

برای وضوح بیشتر مطلب برای دوستانی که ممکنه در آینده همین مشکلو داشته باشند عرض می شود:

طبق کدی که دوستمان  آقا امیر  لطف کردند و ارائه کردند ، اگه یک edittext ویک  label داشته باشید ،کدهاتون اینجوری میشه که شما درمحاسباتتان باید از  متغییر tx ویاهمان محتویات label1 استفاده کنید .

Sub Globals
	Dim tx As String
	Private EditText1 As EditText
	Private Label1 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("Layout1")
End Sub

Sub EditText1_TextChanged (Old As String, New As String)
	
	Dim D As Double
	Dim S,N,O As String
	n=New.Replace(",","")
	O=Old.Replace(",","")
	
	
	If O<>N Then
		EditText1.Text=EditText1.Text.Replace(",","")
		S=EditText1.Text
		If IsNumber(s) =True And S<>"0" Then
			D=s
			EditText1.Text=NumberFormat(D,0,0)
		End If
	End If
	EditText1.SelectionStart=EditText1.Text.Length
	
	
	Dim number As Int

	tx=EditText1.Text
	tx = tx.Replace(",","")
	If IsNumber(tx)Then number = tx
	Label1.Text=tx

End Sub

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...