بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
shahkar_ir 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام دوستان

 

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

 

وقتی زبان گوشی انگلیسیه برنامه مشکل نداره اما وقتی زبانش فارسیه خطای exceptionnumberformat داره  مثلا شما عدد 6.55 را وارد میکنید متغیر 6,55 ذخیره میشه  یعنی بجای .  کاما میخوره و اعداد فارسی میشن که تو محاسبات تشخیص نمیده فارسی و از فرمتش خطا میده.

 

در ضمن من روی اندروید استودیو ساختم برنامه رو.

 

یک راه حلشو پیدا کردم که در ابتدای اجرای برنامه Locale برنامه رو us ست کنیم.اما راه حل درستش فکر نکنم این باشه

 مثلا تو عکس زیر من 6.55 را وارد کردم ببینید چون زبان فارسیه به چی تبدیل شده و تو محاسبات نمیتونه تشخیص بده فارسیه و فورس کلوز میشه

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

نظرات

shahkar_ir 11 سال پیش
لطفا یه نگاه به این تاپیک هم بندازید
hamed 11 سال پیش
دوست من کمی شکیبا باشید تا به جواب برسید. لطفا کدتون را قرار دهید ببینیم چه کار کرده اید. احتمالا مقدار خوانده شده از باکس را درست کست نکرده اید یا اگر تنظیماتی برای زبان اعمال کرده اید، اشکالی ایجاد نموده اید.
shahkar_ir 11 سال پیش
برنامه وقتی زبان گوشی رو انگلیسیه مشکلی نداره ولی وقتی فارسیه چون اعداد و پوینت(.) بصورت کاما ذخیره میشه ایجاد اشکال می کنه
hamed 11 سال پیش
1- آیا در برنامه فونتی لحاظ کرده اید؟ اگر اینطور است برای باکس مربوطه با حذف آن یکبار تست کنید. 2- آیا کیبورد انحصاری نوشته اید؟ اگر اینطور است به آن شک کنید. 3- زبان را در داخل برنامه تغییر می دهید؟ اگر اینطور است چگونگی آن را ذکر کنید و اینکه روی این تکست باکس تغییر خاصی اعمال می کنید و یا خیر؟4- آیا کیبورد ورودی اطلاعات را محدود به ورود اعداد کرده اید؟ این کار ممکن است مشکل شما را از ورود کاراکتر های متفرقه مرتفع سازد. 5- آیا از نحوه صحیح کست کردن اطلاعات خود مطمئن هستید؟

پاسخ‌ها 3

مجتبی یگانه 11 سال پیش

توجه کنید که مشکل شما با روش ابتکاری خودتون یعنی Replace کاما با نقطه قابل حل بود ، اما اگر روش استاندارد اش رو بخواین ، باید از Locale ها استفاده کنید ، در واقع Locale ها در اندروید اجازه میدند که با واحد های و نماد های محلی هم بتونید پردازشی رو انجام بدید ، مثلا در مورد شما این لینک کمک تون میکنه .

و این هم یک نمونه کد :

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();

نظرات

shahkar_ir 11 سال پیش
با تشکر از کمکتون.هنوز تست نکردم.ولی من برای رفع مشکل در ابتدای Activity کد Locale رو برابر US ست کردم مشکل حل شد.اما ظاهرا این مشکل مربوط به Android Studio هستش و در اکلیپس مشکل نداره. در پاسخ دوست خوبمون آقا حامد هم عرض کنم که از هیچگونه موارد سفارشی مثل فونت یا کیبورد استفاده نکردم
shahkar_ir 11 سال پیش
یک مورد دیگه هم عرض کنم مشکل فقط پوینت(.) نیست چون اعداد هم فارسی می شدند و آن هم باعث اشکال می شد. در اولین فرصت کدی که مشکل را حل کرد می ذارم.
مجتبی یگانه 11 سال پیش
دقیقا ! ، من فقط یه نمونه کد بهتون دادم و خوشحالم که یکمی بهتون کمک کرد ، نه این مشکلی نیست که فقط تو محیط توسعه ی خاصی پیش بیاد ! ، تو دستگاه هایی که زبان اول شون فارسی هست این مشکل به وجود میاد :) ، همون طور که گفتید بهترین راه ، locale کردن اش به US یا زبانی نزدیک به املای واحد پولی مورد نظر هست
shahkar_ir 11 سال پیش

سلام دوستان گلم

من از کد زیر استفاده کردم.اگه راه حل بهتری دارید دریغ نکنید.

         Configuration config = new Configuration();
        config.locale = Locale.US;
        Locale.setDefault(Locale.US); // has no effect
        Resources res = getApplicationContext().getResources();
        res.updateConfiguration(config, res.getDisplayMetrics());
 

نظرات

arshadtehrani 11 سال پیش

سلام دوستان

من روش های مشابه ای که دوستان ذکر کرده بودند را امتحان کردم ولی 100 درصدی نیست و بازم گاها مشکلاتی پیش امده من خودم از کد زیر استفاده می کنم و جواب گرفتم

 	public static String toStandardNumber(String strNumberParam) {
        strNumberParam = strNumberParam.replace("۰", "0");
        strNumberParam = strNumberParam.replace("۱", "1");
        strNumberParam = strNumberParam.replace("۲", "2");
        strNumberParam = strNumberParam.replace("۳", "3");
        strNumberParam = strNumberParam.replace("۴", "4");
        strNumberParam = strNumberParam.replace("۵", "5");
        strNumberParam = strNumberParam.replace("۶", "6");
        strNumberParam = strNumberParam.replace("۷", "7");
        strNumberParam = strNumberParam.replace("۸", "8");
        strNumberParam = strNumberParam.replace("۹", "9");
        strNumberParam = strNumberParam.replace("٫", ".");

        return strNumberParam;
    }

نظرات


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