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

سه رقم سه رقم


taha1371

سوال

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

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

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

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

در 22 ساعت قبل، taha1371 گفته است :

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

1  اگه عدد بیشتر 3رقم باشه ارور میده 

2 میخوام حاصل جمع که میاد داخل  TextView  بازم 100,234,123 اینجوری سه رقم سه رقم بشه 

 

بازم ممنونم

 

 

خب حالا حل اون دوتا مشکل 

برای اولیش که گفتید بیشتر سه رقم اررور میده 

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

یعنی انگار خودمون اومدیم و کاما نوشتیم و در واقع این کاما بخشی از این متن هست

واسه همین نمیشد روش عمل ریاضی انجام بدیم

راه حل

باید از DecimalFormat استفاده کنیم

 

DecimalFormat df = new DecimalFormat("###,###,###,###,###,###,###,###");

خب ببینید ما الان یه DecimalFormat ساختیم و اسمشو گزاشتیم df و بهش فرمت دادیم 

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

حالا کار این DecimalFormat  این هست که میاد مثل یه صافی عمل میکنه و بهش متن ادیت تکست رو میدیم و میگیم که طبق اون فرمت که واسش تعریف کریم متن رو انالیز کنه 

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

برای انی کار باید یه try / catch  ساده بنویسیم 

try {
                    num =  df.parse(matn).longValue();
                } catch (ParseException e) {
                    e.printStackTrace();
                }

 همینجور که توی کد نوشتم در واقع گفتیم که بیاد و متغیر matn  که تکست مربوط به Edittext ما هست رو بگیره و طبق اون فرمت که واسش تعریف کریم متن رو انالیز کنه و عدد هاش رو جدا کنه اوجا که نوشتم  longValue در واقع خواستم عددهاش رو جدا کنه و بریزه توی متغیر num که از نوع Long تعریفش کردم 

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

مثلا یه واحد بهش اضافه میکنم 

num = num + 1;

الان باید این عددد رو دوباره برگردونم به حالت کاما دار ( همون فرمت ###,###,###,###,###,###,###,### ) برای اینکار بازم باید از Decimalformat استفاده کنم 

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

حالا برعکس 

عدد بهش میدیم و قالب متن رو ازش میخوایم 

TextView.setText(df.format(num))

دقت کنید که توی پرانتز باید همون متغیر عددی رو بدیم 

این دیگه اررور نمیده 

===========================================================================================================================================

اینم از سورس خودم MainActivity.java

package com.example.fazelsbr.myapplication;

import android.app.Activity;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import java.text.DecimalFormat;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;


public class MainActivity extends Activity implements MainActivity2 {



    EditText editText ;
    Button btn;
    TextView TextView ;
    String matn ;
    Long num;


    @Override
    protected void onCreate(Bundle MainActivity2) {
        super.onCreate(MainActivity2);
        setContentView(R.layout.activity_main);


        btn = (Button) findViewById(R.id.btn);
        editText = (EditText) findViewById(R.id.T1);
        TextView = (TextView) findViewById(R.id.tv);


        editText.addTextChangedListener(new NumberTextWatcherForThousand(editText));





        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                matn = editText.getText().toString();


                DecimalFormat df = new DecimalFormat("###,###,###,###,###,###,###,###");



                try {
                    num =  df.parse(matn).longValue();
                } catch (ParseException e) {
                    e.printStackTrace();
                }


                num = num + 1;

                TextView.setText(df.format(num));
            }
        });

    }

اینم یه عکس از نتیجه کار 

Screenshot_41_.png

موفق باشید

 

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

بازم  مشکل اگه فنت گوشی فارسی باشه مشکل پیدا میکنه جمع اشتبا میشه123456.png

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

در در 1395/12/20, 11:57:08، taha1371 گفته است :

کسی نمیدونه چطوری میشه حلش کرد

عزیزان چرا لقمه را دور سر میچرخونید

تو این لینک توضیح دادم به سادگی آب خوردن ...

تبدیل عدد به رشته پول و برعکس

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

در 3 ساعت قبل، حمید زارع گفته است :

عزیزان چرا لقمه را دور سر میچرخونید

تو این لینک توضیح دادم به سادگی آب خوردن ...

تبدیل عدد به رشته پول و برعکس

برادر من برای اندروید استدیئ میخوام

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

در در 1395/12/15, 16:31:43، taha1371 گفته است :

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

سلام دوست عزیز 

با subString میشه انجامش داد 

به این شکل که میگید بیاد متن رو از ادیت تکست بگیره و اون سه رقم مد نظرتون از طریق substring ابتدا و انتهای بازه سه تایی رو بهش میدید و متن مورد نظرتون رو واستون جدا کنه و هر کاری خواستید باهاش انجام بدید 

android - Extract substring from a string - Stack Overflow

 

منظورتون اینجوریه ؟!

ans.PNG

 

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

در 42 دقیقه قبل، taha1371 گفته است :

سلام نه داداش اینجوری منظوزمه

photo_2017-03-07_22-27-52.jpg

خب دوست عزیز از اول این عکسو میزاشتید 

خب ببینید 

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

NumberTextWatcherForThousand

بعد این کد رو کپی کنید توش 

package com.example.fazelsbr.myapplication;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.util.StringTokenizer;

/**
 * Created by skb on 12/14/2015.
 */
public class NumberTextWatcherForThousand implements TextWatcher {

    EditText editText;


    public NumberTextWatcherForThousand(EditText editText) {
        this.editText = editText;


    }

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

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        try
        {
            editText.removeTextChangedListener(this);
            String value = editText.getText().toString();


            if (value != null && !value.equals(""))
            {

                if(value.startsWith(".")){
                    editText.setText("0.");
                }
                if(value.startsWith("0") && !value.startsWith("0.")){
                    editText.setText("");

                }


                String str = editText.getText().toString().replaceAll(",", "");
                if (!value.equals(""))
                    editText.setText(getDecimalFormattedString(str));
                editText.setSelection(editText.getText().toString().length());
            }
            editText.addTextChangedListener(this);
            return;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            editText.addTextChangedListener(this);
        }

    }

    public static String getDecimalFormattedString(String value)
    {
        StringTokenizer lst = new StringTokenizer(value, ".");
        String str1 = value;
        String str2 = "";
        if (lst.countTokens() > 1)
        {
            str1 = lst.nextToken();
            str2 = lst.nextToken();
        }
        String str3 = "";
        int i = 0;
        int j = -1 + str1.length();
        if (str1.charAt( -1 + str1.length()) == '.')
        {
            j--;
            str3 = ".";
        }
        for (int k = j;; k--)
        {
            if (k < 0)
            {
                if (str2.length() > 0)
                    str3 = str3 + "." + str2;
                return str3;
            }
            if (i == 3)
            {
                str3 = "," + str3;
                i = 0;
            }
            str3 = str1.charAt(k) + str3;
            i++;
        }

    }

    public static String trimCommaOfString(String string) {
//        String returnString;
        if(string.contains(",")){
            return string.replace(",","");}
        else {
            return string;
        }

    }
}

 

حالا کافیه برای ادیت تکستتون 

بنویسید 

editText.addTextChangedListener(new NumberTextWatcherForThousand(editText));

به همین سادگی

اینم یه عکس

Screenshot_40_.png

 

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

در ۱ ساعت قبل، taha1371 گفته است :

اگه بخوام دوتا باشه باهم جمع کنم چکار کنم

اااااااااااااااااااااااااا

همون یه دونه کلس که ساختی واسه همشون کافیه

خب مشخصه دیگه یه ادیت تکست دیگه هم معرفی کنید و مثل همین ادیت تکست قبلی باهاش کار کنید 

هزار تا ادیت تکست دیگه هم تعریف کنید و همیجور باهاش کار کنید 

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

Integer number1 ;
Integer number2 ;

number1 = Integer.parseInt(String.valueOf(editText1.getText()))

number2 = Integer.parseInt(String.valueOf(editText2.getText()))

 

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

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

ممنون از راهنمایی شما اما یه مشکل وقتی این دو خط کد میزارم ارور میدهScreenshot_1488825271.png

number1 = Integer.parseInt(String.valueOf(editText1.getText()));

number2 = Integer.parseInt(String.valueOf(editText2.getText()));

 

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

در 3 ساعت قبل، taha1371 گفته است :

ممنون از راهنمایی شما اما یه مشکل وقتی این دو خط کد میزارم ارور میده

 

 

اول باید متن رو از EditText بگیرید و بریزید توی یه متغیر String   چون متن توی EditText ، از نوع String نیست واسه همین اخرش   toString. میزاریم

String matn ;

matn = editText.getText().toString();

 

الان باید متغیر String رو به متغیر int تبدیل کنیم تا بتونیم روش کارای ریاضی ( جمع کردن ) انجام بدیم 

مثلا ما اینجا یه عدد بهش اضاف میکنیم و میریزیمش توی یه متغیر عددی دیگه

int Number1 ;
int Number2 ;

Number1 = Intrgrt.parseInt(matn);

Number2 = Number + 1 ;

 

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

String matn2

matn2 = Integer.toString(Number2);

TextView.setText(matn2);

 

تموم

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

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

1  اگه عدد بیشتر 3رقم باشه ارور میده 

2 میخوام حاصل جمع که میاد داخل  TextView  بازم 100,234,123 اینجوری سه رقم سه رقم بشه 

 

بازم ممنونم

 

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

بایگانی شده

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

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

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