PDA

View Full Version : تفاوت ممیز و نقطه ( / و . ) در محاسبات و تبدیلات در سی شارپ - تبدیل رشته به عدد ممیز در هر فرمتی



rezaAcc
شنبه 03 تیر 1396, 22:39 عصر
با سلام
دوستان من وقتی کد زیر را مینویسم و مقدار Num_1 را 12.5 بدهم و Num_2 را 1 بدهم ، هنگام اجرای برنامه ارور میدهد.
کد:


double num1 = Convert.ToDouble(Num_1.Text);
double num2 = Convert.ToDouble(Num_2.Text);


_Sum.Text = (num1 + num2).ToString();


ارور



{"Input string was not in a correct format."}



اما اگر مقدار بجای نقطه از ممیز استفاده بشود ، بطور مثال بجای 12.5 از 12/5 استفاده بشود ، کار حله و اروری هم نداریم


البته یه راه دیگه داریم که برویم داخل کنترل پنل / Region / از تب Formats / قسمت additional / تب Numbers و Desimal Symbol را برابر . (دات)(نقطه) قرار داد

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

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

samiasoft
یک شنبه 04 تیر 1396, 00:06 صبح
درود

خب یه راه حل ساده.

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

Mahmoud.Afrad
یک شنبه 04 تیر 1396, 02:13 صبح
چند راه هست.
- یکی اینکه کاربر رو مجبور کنید از یک فرمت استفاده کند و در غیراینصورت پیغام مناسب نمایش بدید
- راه دیگه این هست که چک کنید کدام جداکننده استفاده شده و در صورت لزوم replace کنید که در اینصورت باید یک فرمت رو معیار قرار بدید.
- راه دیگه هم اینه که یک متد بنویسید و سعی کنید با دو فرهنگ (Culture) فارسی و انگلیسی، رشته رو تبدیل کنید. یا اینکه با یک حلقه همه فرهنگها رو تست کنید.در این مورد باید از overload زیر استفاده کنید.
Double.TryParse( String, NumberStyles, IFormatProvider, Doubl e)

رامین مرادی
یک شنبه 04 تیر 1396, 08:46 صبح
با سلام
دوستان من وقتی کد زیر را مینویسم و مقدار Num_1 را 12.5 بدهم و Num_2 را 1 بدهم ، هنگام اجرای برنامه ارور میدهد.
کد:


double num1 = Convert.ToDouble(Num_1.Text);
double num2 = Convert.ToDouble(Num_2.Text);


_Sum.Text = (num1 + num2).ToString();


ارور



{"Input string was not in a correct format."}



اما اگر مقدار بجای نقطه از ممیز استفاده بشود ، بطور مثال بجای 12.5 از 12/5 استفاده بشود ، کار حله و اروری هم نداریم


البته یه راه دیگه داریم که برویم داخل کنترل پنل / Region / از تب Formats / قسمت additional / تب Numbers و Desimal Symbol را برابر . (دات)(نقطه) قرار داد

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

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

اگه فقط روی یه سیستم برنامت اجرا خواهد شد میتونی از بخش تنظیمات زبان علامت اعشار رو تغییر بدی.
ولی اگه بخوای برنامت عمومی باشه میتونی از روشهایی که دوستان گفتن مثل جایگزینی / به جای . هنگام محاسبه. این کار رو هم داخل کدت انجام بده تا کاربرات هم متوجه این تغییر نشن

rezaAcc
دوشنبه 05 تیر 1396, 15:21 عصر
- راه دیگه هم اینه که یک متد بنویسید و سعی کنید با دو فرهنگ (Culture) فارسی و انگلیسی، رشته رو تبدیل کنید. یا اینکه با یک حلقه همه فرهنگها رو تست کنید.در این مورد باید از overload زیر استفاده کنید.
Double.TryParse( String, NumberStyles, IFormatProvider, Doubl e)

با تشکر از دوستان ، میشه در باره این قسمت یه توضیح بدید.اگه امکانش هست یک نمونه کد بنویسید؟
ممنونم

shahryari
سه شنبه 06 تیر 1396, 20:16 عصر
شما بیا یه کاری کن...
ابتدا دیجیت سپریتور سیستم رو بدست بیار (که ئر هر سیستم ، بستگی به تنظیمات داره ممکنه / باشه یا , یا ....)
Char a = Convert.ToChar(CultureInfo. CurrentCulture.NumberFormat. NumberDecimalSeparator);

کد بالا یه کارکتر بهت میده ، اون کارکتر رو در عدد داخل باکست هرچی هست رو با "" جایکزین کن
و با کلاس کانورت یا دابل . ترای پارز ارزش عددیش رو بگیر و خلاص...

rezaAcc
سه شنبه 06 تیر 1396, 21:52 عصر
شما بیا یه کاری کن...
ابتدا دیجیت سپریتور سیستم رو بدست بیار (که ئر هر سیستم ، بستگی به تنظیمات داره ممکنه / باشه یا , یا ....)
Char a = Convert.ToChar(CultureInfo. CurrentCulture.NumberFormat. NumberDecimalSeparator);

کد بالا یه کارکتر بهت میده ، اون کارکتر رو در عدد داخل باکست هرچی هست رو با "" جایکزین کن
و با کلاس کانورت یا دابل . ترای پارز ارزش عددیش رو بگیر و خلاص...

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