1 Востаннє редагувалося #Sparta (29.11.2015 22:12:26)

Тема: Double в консолі

Привіт усім !
У мене маленька проблемка, якщо це можна так назвати.
Я намагався зчитати 2 double значення і обрахувати їх суму наступним кодом.

Прихований текст
Console.WriteLine("Input 1st double value");
double x = double.Parse(Console.ReadLine());

Console.WriteLine("Input 1st double value");
double y = double.Parse(Console.ReadLine());

x+=y;

Console.WriteLine(x);
Console.ReadKey();

Штука в тому, що коли я вводжу числа і намагаюсь розділити дробову частину через "." , то ерорить наступну помилку(скріншот №1).

Погугливши трошки, знайшов , що можна обійти ось таким чином.Попередньо підключивши "System.Globalization"

Прихований текст
Console.WriteLine("Input 1st double value");
            
double x = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);

Console.WriteLine("Input 2nd double value");

double y = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);

x += y;

Console.WriteLine(x);

Console.ReadKey();

І все начебто добре, але результат всеодно виводить з "," в якості розділювача.(скріншот №2).
Не можу знайти відповідної інфи, де в налаштуваннях компілятора це потрібно змінити, бо в знайомого на ПК все працює на ОК.

Буду дуже вдячний за допомогу

Post's attachments

Untitled.png 9.16 kb, 160 downloads since 2015-11-29 

2 Востаннє редагувалося #Sparta (29.11.2015 22:29:49)

Re: Double в консолі

2 гий скрін.
Чомусь неможу одночасно 2 загрузити.

Прихований текст

3

Re: Double в консолі

А яка різниця як той результат видається? Ти що його до другої програми передаєш?
Взагалі то можна й так:

Console.WriteLine(x.ToString().Replace(",","."));

якщо "побістрячку". А якщо по розуму, то створити свою локалину:

            CultureInfo ci = CultureInfo.CreateSpecificCulture("en-US");
            ci.NumberFormat.NumberDecimalSeparator="*";
            Console.WriteLine(String.Format(ci, "{0}", 22.156));
            Console.ReadKey();

Тут зірочка - новий сепаратор чисел.

Подякували: #Sparta, koala2

4

Re: Double в консолі

В знайомого просто в налаштуваннях локалі ("Мова та регіональні стандарти" на панелі задач в Windows) стоїть розділювач .
Рішення в вашому стилі:

Console.WriteLine(x.ToString(CultureInfo.InvariantCulture));

Можна також проголосити цю культуру типовою на початку програми:

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

чи в налаштуваннях проекту.
Але ви маєте чітко усвідомлювати, що саме ви робите - а саме, замінюєте всю локаль, всі методи роботи з рядками, пов'язані з мовою (зокрема, сортування).

Подякували: #Sparta, leofun012

5

Re: Double в консолі

Itari написав:

А яка різниця як той результат видається? Ти що його до другої програми передаєш?
Взагалі то можна й так:

Console.WriteLine(x.ToString().Replace(",","."));

якщо "побістрячку". А якщо по розуму, то створити свою локалину:

            CultureInfo ci = CultureInfo.CreateSpecificCulture("en-US");
            ci.NumberFormat.NumberDecimalSeparator="*";
            Console.WriteLine(String.Format(ci, "{0}", 22.156));
            Console.ReadKey();

Тут зірочка - новий сепаратор чисел.

Дякую, спробую реалізувати твій варіант.
Але просто принципове питання саме у вводі а не у виводі.Особисто я звик через крапочку, мабуть, як і більшість.

6

Re: Double в консолі

koala написав:

В знайомого просто в налаштуваннях локалі ("Мова та регіональні стандарти" на панелі задач в Windows) стоїть розділювач .
Рішення в вашому стилі:

Console.WriteLine(x.ToString(CultureInfo.InvariantCulture));

Можна також проголосити цю культуру типовою на початку програми:

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

чи в налаштуваннях проекту.
Але ви маєте чітко усвідомлювати, що саме ви робите - а саме, замінюєте всю локаль, всі методи роботи з рядками, пов'язані з мовою (зокрема, сортування).

Дякую , якраз натрапив на потрібну статтю.
Можете закривати, розібрався чому. :)

7 Востаннє редагувалося Itari (29.11.2015 22:37:00)

Re: Double в консолі

принципове питання саме у вводі а не у виводі.

Взагалі то все просто:

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

Й хочешь - так вводь, хочеш по-іншому... А ще круче буде регулярками, але це вже на довбанутих юзерів такий захист робиться, яки попривикали вводити не крапку чи кому, а пробел наприклад. У мене такі кадрировані є...

Подякували: #Sparta1

8

Re: Double в консолі

Itari написав:

принципове питання саме у вводі а не у виводі.

Взагалі то все просто:

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

Й хочешь - так вводь, хочеш по-іншому... А ще круче буде регулярками, але це вже на довбанутих юзерів такий захист робиться, яки попривикали вводити не крапку чи кому, а пробел наприклад. У мене такі кадрировані є...

Ахахах, дійсно :) Профіт.