Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238

Форматирование вывода в консоли

10.09.2020, 19:52. Показов 2855. Ответов 19
Метки c# (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Буду краток. Читаю книгу Штилдта "С# 4.0 Полное руководство"
Вот элементарный исходник.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Применить команды форматирования.
 
using System;
 
class DispleyOption
{
    static void Main ()
    {
        decimal balance;
        
        Console.WriteLine();
        Console.WriteLine("Деление 10/3 даёт: {0:#.##}", 10.0 / 3.0);
 
        Console.WriteLine();
        Console.WriteLine("{0:###,###.##}", 123456.56);
 
        Console.WriteLine();
        balance = 12323.09m;
        Console.WriteLine("Текущий баланс равен: {0:C}", balance);
    }
}
Результат вывода:


Деление 10/3 даёт: 3,33

123 456,56

Текущий баланс равен: 12 323,09 ?



Ожидаемый результат
Скрин из книги

Вопрос:
1) Почему вместо запятой пробел и вместо точки запятая?
2) Не указана валюта и аналогичная путаница с точками/запятыми?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2020, 19:52
Ответы с готовыми решениями:

Форматирование вывода
Здравствуйте помогите разобраться с форматированием вывода, а то совсем беда( using System; using System.Linq; class TwoDShape {...

Работа с консолью и форматирование вывода
Приветствую, форумчане! Необходимо создать программу, которая будет: 1. Выводить надпись в любом месте текстового экрана...

Форматирование вывода с выравниванием влево/вправо
Здравствуйте, условие задачи: Используя параметр форматирования X, получите на экране шестнадцатиричное представление следующих...

19
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
10.09.2020, 19:58
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
Вопрос:
Точки/запятые - это из-за региональных настроек винды. Насчет значка валюты есть сомнения, но, думаю, что причина та же
0
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
10.09.2020, 20:06  [ТС]
То есть можно попробовать настроить Винду под usa и запустить программку по новой?

Я думал причина в том что книга по четвертой версии, а она уже не последняя.
0
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
10.09.2020, 20:12
Лучший ответ Сообщение было отмечено Майкл Скоуфилд как решение

Решение

Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
можно попробовать настроить Винду под usa и запустить программку по новой?
Да. По идее, будут и запятые вместо пробелов и точки вместо запятых)))
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.09.2020, 20:24
Майкл Скоуфилд,
Установленная локаль в Windows влияет на свойство Thread.CurrentThread.CurrentUICulture свойство.
Сам же язык дистрибутива влияет на Thread.CurrentThread.CurrentCulture свойство.
Но вы всегда сможете изменить их программно:
C#
1
2
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-us");
// в этой локали вывод будет таким - Текущий баланс равен: $12,323.09
1
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
10.09.2020, 20:27  [ТС]
Спасибо. Действительно так. Я думал вопрос в версиях.
И задам вопрос на перёд.
По мере чтения книги могут возникнуть проблемы из-за того что книга о версии 4.0?

Завелось :)

Добавлено через 1 минуту
подскажите куда прописывается данное свойство, что бы попробовать использовать?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.09.2020, 20:30
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
Не указана валюта
Помимо того, что указанная кодировка должна иметь символ валюты текущего потока, еще должен использоваться шрифт, который, имхо, фактически используется для отрисовки.
Чтобы получить рубли, нужно установить явно кодировки UTF8? и установить шрифт консоли, например, в consolas.
C#
1
Console.OutputEncoding = Encoding.UTF8;
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.09.2020, 20:34
Заводим с рублями:
Миниатюры
Форматирование вывода в консоли  
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.09.2020, 20:34
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
По мере чтения книги могут возникнуть проблемы из-за того что книга о версии 4.0?
Проблем не должно быть, но вы не увидите всех новых плюшек последней версии языка.
1
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
10.09.2020, 20:54  [ТС]
Смотрите, в настройках ос я поменял и всё работает.
А вот интересно было бы через код воткнуть локальные настройки к примеру одна строка под ру, вторая под США.
Можете подсказать по примеру как это делается? Буду очень благодарен.
Судя по моему вопросу можно догадаться что я ещё не того... )

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Применить команды форматирования.
 
using System;
 
class DispleyOption
{
        static void Main ()
    {
        int i;
        decimal balance;
 
        Console.WriteLine("Число\tКвадрат\tкуб");
 
        for (i = 1; i < 10; i++)
            Console.WriteLine("{0}\t{1}\t{2}", i, i * i, i * i * i);
 
        Console.WriteLine();
        Console.WriteLine("Деление 10/3 даёт: {0:#.##}", 10.0 / 3.0);
 
        Console.WriteLine();
        Console.WriteLine("{0:###,###.##}", 123456.56);
 
        Console.WriteLine();
        balance = 12323.09m;
        Console.WriteLine("Текущий баланс равен: {0:C}", balance);
    }
}
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.09.2020, 21:00
Используйте перегрузку ToString метода c передачей CultureInfo:
C#
1
value.ToString("N", new CultureInfo("en-us"));
1
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
10.09.2020, 21:01
Майкл Скоуфилд, https://docs.microsoft.com/ru-... tProvider_
0
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
10.09.2020, 21:17  [ТС]
При использование этого способа знак $ наоборот пропадет.
И ещё нужно дописывать using System.Globalization

Цитата Сообщение от IamRain Посмотреть сообщение
value.ToString("N", new CultureInfo("en-us"));
Честно не понятно что такое N. Почему пропадает доллар и как в таком формате вывести не просто число, а с текстом как в примере
C#
1
 Console.WriteLine("Текущий баланс равен: {0:C}", balance);
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.09.2020, 21:38
На основе вашего примера:
C#
1
2
3
4
5
6
7
8
9
10
var cultures = new CultureInfo[]
            {
                new CultureInfo("en-US"), 
                new CultureInfo("ru-RU"), 
            };
 
            foreach (var cultureInfo in cultures)
            {
                Console.WriteLine($"Текущий баланс равен: {balance.ToString("C", cultureInfo)}");
            }
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
не понятно что такое N
Это я просто скопипастил, а вообще это флаг форматирования, N - number, С - currency (валюта). С использованием С как раз добавляется знак валюты к числу.
Стандартные числовые строки форматирования
1
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
10.09.2020, 21:52  [ТС]
В общем к foreach я ещё дойду по книге дальше, а вообще у меня работает без каких либо выпендрёжей. Просто надо было изменить локализацию в настройках пк.
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
10.09.2020, 22:22
Лучший ответ Сообщение было отмечено Майкл Скоуфилд как решение

Решение

Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
Просто надо было изменить локализацию в настройках пк
ради одного примера менять - оно того не стоит, как минимум потому что если программу запустить на другом ПК - результат может быть иным, как максимум - настройки под другие программы на вашем ПК.

По поводу темы: надо учитывать 2 нюанса - кодировку и глобализацию.
По умолчанию в русской винде (не важно ХР, 7, 10; важен язык) стоит кодировка cp866, которая поддерживает не все символы. Играемся с кодировкой вывода на консоль
C#
1
2
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        Console.WriteLine('₽');
По поводу глобализации - для каждой страны свои правила: разделителей чисел, сравнения строк, правописание текста и тд. Чтобы выбрать конкретные "правила" - нужно задать конкретную культуру
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
одна строка под ру, вторая под США
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
 
class Program
{
    static void Main()
    {
        decimal balance = 123.45m;
 
        Console.OutputEncoding = System.Text.Encoding.UTF8;
 
        System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("en-US");
        Console.WriteLine("{0:C}", balance);
 
        System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("ru-RU");
        Console.WriteLine("{0:C}", balance);
 
        Console.WriteLine(string.Format(new System.Globalization.CultureInfo("fr-FR"), "{0:C}", balance));
 
        Console.ReadKey();
    }
}
А вообще в C# много всяких "фишек" связанных со строками. Все их не описать за 100 страниц.
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
По мере чтения книги могут возникнуть проблемы из-за того что книга о версии 4.0?
В данной книге есть недочеты (поймете по мере прочтения). Что касается новых возможностей - позже выучите из без труда, главное хорошо с основами разобраться, а Шилдт в этом плане хорош.
2
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
10.09.2020, 22:28  [ТС]
Благодарю за столь обширный и понятный ответ.
Шилдта выбрал по рекомендации одной из IT компаний. Посоветовали, скажем так, как вступительный материал в данный язык. Мне лично формат в котором изложен материал нравиться, доступно, понятно и по делу.
Ну а что касается новых плюшек то думаю так и есть - главное разобраться с основами, а потом уже расширять знания.
0
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
11.09.2020, 06:56
Цитата Сообщение от Enifan Посмотреть сообщение
стоит кодировка cp866
а разве не 1251?
0
 Аватар для Майкл Скоуфилд
11 / 10 / 3
Регистрация: 25.09.2015
Сообщений: 238
11.09.2020, 08:06  [ТС]
Кстати да. Вроде как стандартная кодировка windows-1251.
По крайней мере когда работал с html то была она и менял на utf-8.
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
11.09.2020, 14:01
Цитата Сообщение от Svetlana Saphon Посмотреть сообщение
а разве не 1251?
Цитата Сообщение от Майкл Скоуфилд Посмотреть сообщение
Вроде как стандартная кодировка windows-1251
Мне говорили что базовая Юникод, а как итог
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
class Program
{
    static void Main()
    {
        Console.WriteLine(Console.OutputEncoding.HeaderName); // выходные данные
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        Console.WriteLine(Console.OutputEncoding.HeaderName); // выходные данные
 
        Console.WriteLine();
 
        Console.WriteLine(Console.InputEncoding.HeaderName);  // входные данные
        Console.InputEncoding = System.Text.Encoding.Unicode;
        Console.WriteLine(Console.InputEncoding.HeaderName);  // входные данные
 
        Console.ReadKey();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2020, 14:01
Помогаю со студенческими работами здесь

Форматирование вывода денежных числовых данных и не только
При разборе темы &quot;Управление форматом числовых данных&quot; рассматривал пример using System; using System.Collections.Generic; using...

Ограничения вывода в консоли
Здравствуйте! Скажите пожалуйста, почему при выводе в консоль цикла на, к примеру, 1000 итераций выводится только 299 из них? а конкретно с...

Ошибка вывода консоли в форму
Добрый день ещё раз. При написании программы возникла следующая проблема. При запуске выскакивает исключение с сообщением типа...

Дублирование вывода из консоли командной строки
Добрый день. Я хотел бы запустить из C# процесс так, чтобы он шел в консоли и завершился. Но при этом получать в C# данные из консоли (что...

Форматирование вывода двухмерного массива в textbox
Уважаемые форумчане, выручайте. В цикле выводятся значения из массивов time и fsy, в textbox10. Выводятся не красиво и не удобно. В массиве...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru