PDA

View Full Version : سوال: مشکل کد



mahdavi1385
دوشنبه 05 اسفند 1398, 17:34 عصر
چرا کد زیر عدد اعشاری را جز خطاها حساب می کند مثلا 19.5 را جز ارور حساب کرده و ارور چاپ می کند.
for (;;)
{
if ((double.TryParse(Console.ReadLine(), out nomre1) == false) || (nomre1 < 0.00) || (nomre1 > 20.00))
{
Console.WriteLine("Error: Invalid input!");
}
}

ASHKANLAEI
دوشنبه 05 اسفند 1398, 18:45 عصر
برای من که درست کار میکنه. مطمئنید متغیر از نوع double هست؟

the king
دوشنبه 05 اسفند 1398, 19:53 عصر
چرا کد زیر عدد اعشاری را جز خطاها حساب می کند مثلا 19.5 را جز ارور حساب کرده و ارور چاپ می کند.
for (;;)
{
if ((double.TryParse(Console.ReadLine(), out nomre1) == false) || (nomre1 < 0.00) || (nomre1 > 20.00))
{
Console.WriteLine("Error: Invalid input!");
}
}
در تنظیمات Region and Language سیستم عامل بر اساس زبان و تنظیمات دلخواه کاربر فرمت متفاوتی برای اعداد بکار برده میشه، کاملا متفاوت از سایر فرمت ها.
مثلا بصورت پیشفرض فرانسوی زبان ها برای مشخص کردن اعشار بجای نقطه از ویرگول استفاده می کنند و از کاراکتر فاصله برای جدا کردن سه رقم سه رقم.
در حالی که برای آلمانی زبان ها از نقطه برای جدا کردن سه رقم سه رقم استفاده میشه.
می توانیم بررسی کنیم که فرضا در تنظیمات فعلی سیستم عامل (CurrentCulture) کاراکتر جداکننده اعشار چیست :

var s = System.Globalization.CultureInfo.CurrentCulture. NumberFormat.NumberDecimalSeparator;
Console.WriteLine(s);


بصورت پیشفرض NET. از همون تنظیمات فعلی سیستم عامل (CurrentCulture) استفاده می کنه، پس اگر فرمت ورودی کاربر مشابه تنظیمات سیستم نباشه ممکنه نتایج نامناسبی بگیرید.
اما همیشه می توانید بجای تنظیمات پیشفرض خودتان صریحا تنظیمات فرمت خاصی رو بکار ببرید، مثلا InvariantCulture برای یک حالت استاندارد مستقل از زبان.

double value;
double.TryParse("123.4", System.Globalization. NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out value);