آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نشناختن ورودی به عنوان عدد!

h_r_v  11 سال پیش  11 سال پیش
+3 0

من میخواستم مقدار عدد ورودی که کاربر میزنه به ازای هر سه تا صفر یه کاما بزاره! یعنی 20000 رو 20,000 نشون بده! واسه همین از یه textwatcher به شکل زیر استفاده کردم :


import java.text.DecimalFormat;
import java.text.ParseException;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

public class NumberTextWatcher implements TextWatcher {

private DecimalFormat df;
private DecimalFormat dfnd;
private boolean hasFractionalPart;

private EditText et;

public NumberTextWatcher(EditText et)
{
df = new DecimalFormat("#,###.##");
df.setDecimalSeparatorAlwaysShown(true);
dfnd = new DecimalFormat("#,###");
this.et = et;
hasFracti /> }

@SuppressWarnings("unused")
private static final String TAG = "NumberTextWatcher";

@Override
public void afterTextChanged(Editable s)
{
et.removeTextChangedListener(this);

try {
int inilen, endlen;
inilen = et.getText().length();

String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
Number n = df.parse(v);
int cp = et.getSelectionStart();
if (hasFractionalPart) {
et.setText(df.format(n));
} else {
et.setText(dfnd.format(n));
}
endlen = et.getText().length();
int sel = (cp + (endlen - inilen));
if (sel > 0 && sel <= et.getText().length()) {
et.setSelection(sel);
} else {
// place cursor at the end?
et.setSelection(et.getText().length() - 1);
}
} catch (NumberFormatException nfe) {
// do nothing?
} catch (ParseException e) {
// do nothing?
}

et.addTextChangedListener(this);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
{
hasFracti /> } else {
hasFracti /> }
}

}

بعد با یه listener توی mainActivity اون به ادیت تکست دادم :

amount.addTextChangedListener(new NumberTextWatcher(amount));

حالا متاسفانه ورودی رو به عنوان عدد نمیتونه بخونه!
قبلا از کد های getText().toString() و بعدش هم parseDouble استفاده کردم ولی جواب نمیده! ممنون میشم راه حل بدید :)

 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+2 0

فکر کنم این چیزیه که یک تیم میخواد ! ، ورودی رو از نوع لانگ گرفتم ، بعد این که تایپ تموم شد انجامش بدی بهتره

String pattern = "###,###";
DecimalFormat decimalFormat = new DecimalFormat(pattern);
String format = decimalFormat.format(1234567890123456789L);
Log.i("YekTeam", "" + format);
0 0
خیلی ممنون :دی اینی که دادید رو برای نتایج و تکست ویو ها استفاده کردیم و جواب داده! میخواهیم به صورت runtime وقتی طرف داره input میده سه عدد سه عدد یه کاما بزاره! این کارم با همون کدی که بالا دادم کردیم! فقط ورودی رو به عنوان عدد نمیگیره!‌ :|‌ و در نتیجه دستور try اجرا نمیشه که محاسبات انجام بشه بازم ممنون :X (11 سال پیش)
0 0
یعنی مشکل اینه متن تکست ویو parse string یا parse long نمیشه ؟ میخوای نمونه سورس بزارم ! (11 سال پیش)
پاسخ به سوال 
sadeghbarout  11 سال پیش
+1 0

  خب  متن ورودی رو به عنوان یه string بگیر ، بعد با دستور replace کاما ها رو با "" جایگزین کن  و متن باقی مونده رو با همون ParseDouble به عدد تبدیل کن

پاسخ به سوال 
h_r_v  11 سال پیش
0 0

نشد! قسمتی از کد رو میزارم!

 amount.addTextChangedListener(new NumberTextWatcher(amount));



calc.setOnClickListener(new OnClickListener() {



@Override


public void onClick(View arg0) {

String amount1 =amount.getText().toString();
amount1.replace(",","");
try{

double i = Double.parseDouble(amount1);
//doing some calculations :D
}
catch(NumberFormatException e){
Toast.makeText(MainActivity.this, "مقدار را وارد نکرده اید", Toast.LENGTH_LONG).show();

}
}
});

 

0 0
What's Wrong With You Men ! جواب صادق رو ببین ! (11 سال پیش)
0 0
Sorry Bro :D دیدم باو! کدش رو هم توی برنامه گذاشتم جواب نداد :دی (11 سال پیش)
پاسخ به سوال 
sadeghbarout  11 سال پیش
+3 0

خب از دستور replace اشتباه استفاده کردی.

اینو تست کن حتما جواب میده :

  amount1 = amount1.replace(",", "");

ولی از کدت خوشم اومد.  ;)

خودت نوشتیش یا از جایی پیداش کردی؟




0 0
ایول! درست شد! خیلی خیلی ممنون :دی کد اولی که گذاشتم رو از یه بلاگ یه دولوپر برداشتم ولی این دومی که خیلی سادست رو خودمون زدیم :دی (11 سال پیش)
0 0
من دیدم همه فقط برنامه های اولشون رو معرفی میکنن گفتن ما هم فقط همین کار رو کنیم :دی (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .