Софтуерно Инженерство
Loading...
Dimitroff avatar Dimitroff 3 Точки

Primitive Data Types 13 - Comparing Doubles проблем с четене от конзолата.

Като цяло скалъпих програмата да работи - въвеждаш едно число, после друго, сравнява ги и ти казва дали са равни. Само че има един проблем - единственият формат в който приема числата е ако са със запетайка. Пример : 2,6 става; 2.6 не става, дава грешка. Почти съм сигурен, че това зависи само от локалните настройки на компютъра. НО все пак не бих отказал помощ - как да стане номера с форматите, така че да не дава грешки?

Начина. по който съм направил четенето от конзолата е следния:

Console.WriteLine("Write a number");
string aText = Console.ReadLine();
double a = double.Parse(aText);

Тагове:
2
Основи на програмирането 06/04/2015 16:47:54
Anonymous:
Многократно дублирана тема: https://softuni.bg/Forum/77/Homework-CSharp-Basics-Primitive-Data-Types-and-Variables-Comparing-Floats
nakov avatar nakov SoftUni Team Trainer 5459 Точки
Best Answer

Трябва да сложиш локализация в началото на програмата, за да не зависи от настройките на твоя комп:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

С това винаги ще се използва точка "." за разделител между цялата и дробната част. Запетаята за дробна част я забрави. Ползва се само в България и то само в училище. Компютърджиите ползват точка.

7
08/04/2015 00:54:41
Inspix avatar Inspix 51 Точки

Аз лично не знаех за тази локализация и позлвах:

  • double x = double.Parse(Console.ReadLine().Replace('.', ','));

След като прочетох вашия коментар, веднага реших да променя задачите, които използваха double.Parse... 

Проблема с грешките изчезна, независимо дали използваме запетая или точка при въвеждането, но забелязах, че ако въведа числото с запетая, при парсване числото губи дробната си част. Например 3,5 го парсва като 35.

 

Има ли някой друг workaround, като сметнем, че не винаги може да разчитаме на user-а да използва само точка?

1
08/04/2015 15:22:37