Как ввести числа через запятую c
Перейти к содержимому

Как ввести числа через запятую c

  • автор:

Числовые типы с плавающей запятой (справочник по C#)

Числовые типы с плавающей запятой представляют действительные числа. Все числовые типы с плавающей запятой являются типами значений. Они также представляют собой простые типы и могут быть инициализированы литералами. Все числовые типы с плавающей запятой поддерживают арифметические операторы, а также операторы сравнения и равенства.

Характеристики типов с плавающей запятой

C# поддерживает следующие предварительно определенные типы с плавающей запятой:

Ключевое слово или тип C# Приблизительный диапазон значений Точность Размер Тип .NET
float От ±1,5 x 10 −45 до ±3,4 x 10 38 6–9 цифр 4 байта System.Single
double от ±5,0 × 10 −324 до ±1,7 × 10 308 15–17 цифр 8 байт System.Double
decimal от ±1,0 x 10 -28 до ±7,9228 x 10 28 28-29 знаков 16 байт System.Decimal

В приведенной выше таблице каждый тип ключевого слова C# из крайнего левого столбца является псевдонимом для соответствующего типа .NET. Они взаимозаменяемые. Например, следующие объявления объявляют переменные одного типа:

double a = 12.3; System.Double b = 12.3; 

По умолчанию все типы с плавающей запятой имеют значение 0 . Все типы с плавающей запятой имеют константы MinValue и MaxValue с минимальным и максимальными итоговыми значениями этого типа. Типы float и double также предоставляют константы, обозначающие бесконечные и нечисловые значения. Например, тип double предоставляет следующие константы: Double.NaN, Double.NegativeInfinity и Double.PositiveInfinity.

Тип decimal подходит, если требуемая степень точности определяется числом цифр справа от десятичной запятой. Такие числа обычно используются в финансовых приложениях для денежных сумм (например, 1,00 долл. США), процентных ставок (например, 2,625 %) и т. д. Даже числа, точные только до одной десятичной цифры, точнее обрабатываются типом decimal : 0,1, например, можно в точности представить экземпляром decimal . При этом не существует экземпляра double или float , который точно представляет 0,1. Из-за этой разницы в числовых типах в арифметических вычислениях могут возникать непредвиденные ошибки округления при использовании double или float для десятичных данных. Вы можете использовать double вместо decimal , если оптимизация производительности важнее, чем обеспечение точности. Но любая разница в производительности останется незамеченной для всех приложений, кроме самых требовательных к вычислениям. Еще одна возможная причина, по которой следует избегать decimal , — это минимальные требования к хранилищу. Например, ML.NET использует float , так как разница между 4 байтами и 16 байтами суммируется для очень больших наборов данных. Для получения дополнительной информации см. System.Decimal.

В одном и том же выражении можно сочетать и целочисленные типы, и типы float и double . В этом случае целочисленные типы неявно преобразуются в один из типов с плавающей запятой. При необходимости тип float неявно преобразуется в double . Выражение вычисляется следующим образом.

  • Если в выражении есть тип double , оно оценивается как double или bool в реляционных сравнениях или сравнениях на равенство.
  • Если в выражении нет типа double , оно оценивается как float или bool в реляционных сравнениях или сравнениях на равенство.

Можно также смешивать целочисленные типы и тип decimal в выражении. В этом случае целочисленные типы неявно преобразуются в тип decimal , а выражение вычисляется как decimal или bool в реляционных сравнениях и сравнениях на равенство.

Тип decimal нельзя смешивать с типами float и double в выражении. В этом случае, если требуется выполнить арифметические операции или операции сравнения или равенства, необходимо явно преобразовать операнды из типа или в тип decimal , как показано в следующем примере:

double a = 1.0; decimal b = 2.1m; Console.WriteLine(a + (double)b); Console.WriteLine((decimal)a + b); 

Можно использовать строки стандартных числовых форматов или строки пользовательских числовых форматов для форматирования значения с плавающей запятой.

Вещественные литералы

Тип реального литерала определяется его суффиксом следующим образом:

  • Литерал без суффикса или с суффиксом d или D имеет тип double .
  • Литерал с суффиксом f или F имеет тип float .
  • Литерал с суффиксом m или M имеет тип decimal .

В приведенном ниже коде показан пример каждого из них.

double d = 3D; d = 4d; d = 3.934_001; float f = 3_000.5F; f = 5.4f; decimal myMoney = 3_000.5m; myMoney = 400.75M; 

В предыдущем примере также показано использование _ в качестве разделителя цифр. Цифровой разделитель можно использовать со всеми видами числовых литералов.

Можно также использовать экспоненциальное представление, то есть указать экспоненту вещественного литерала, как показано в следующем примере:

double d = 0.42e2; Console.WriteLine(d); // output 42 float f = 134.45E-2f; Console.WriteLine(f); // output: 1.3445 decimal m = 1.5E6m; Console.WriteLine(m); // output: 1500000 

Преобразования

Существует только одно неявное преобразование между числовыми типами с плавающей запятой: из float в double . Однако можно преобразовать любой тип с плавающей запятой в любой другой тип с плавающей запятой с помощьюявного приведения. Для получения дополнительной информации см. статью Встроенные числовые преобразования.

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

  • Типы с плавающей запятой
  • Тип decimal
  • Вещественные литералы

См. также

  • справочник по C#
  • Типы значений
  • Целочисленные типы
  • Строки стандартных числовых форматов
  • Числовые значения в .NET
  • System.Numerics.Complex

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как ввести числа через запятую c

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Как ввести числа через запятую c

Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine . То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:

string hello = "Привет мир"; Console.WriteLine(hello); Console.WriteLine("Добро пожаловать в C#!"); Console.WriteLine("Пока мир. "); Console.WriteLine(24.5);
Привет мир! Добро пожаловать в C#! Пока мир. 24,5

Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который называется интерполяцией:

string name = "Tom"; int age = 34; double height = 1.7; Console.WriteLine($"Имя: Возраст: Рост: м");

Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение. Это можем значение переменной ( ) или более сложное выражение (например, операция сложения ). А перед всей строкой ставится знак доллара $.

При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:

Имя: Tom Возраст: 34 Рост: 1,7м

Есть другой способ вывода на консоль сразу нескольких значений:

string name = "Tom"; int age = 34; double height = 1.7; Console.WriteLine("Имя: Возраст: Рост: м", name, height, age);

Здесь мы видим, что строка в Console.WriteLine содержит некие числа в фигурных скобках: , , . Это плейсхолдеры, вместо которых при выводе строки на консоль будут подставляться некоторые значения. Подставляемые значения указываются после строки через запятую.

При этом важен порядок подобных плейсхолдеров. Например, в данном случае после строки первой указана переменная name, потом height и потом age. Поэтому значение переменной name будет вставляться вместо первого плейсхолдера — (нумерация начинается с нуля), height — вместо , а age — вместо . Поэтому в итоге пи выводе на консоль строка

"Имя: Возраст: Рост: м"

будет заменена на

"Имя: Tom Возраст: 34 Рост: 1,7м"
Console.Write

Кроме Console.WriteLine() можно также использовать метод Console.Write() , он работает точно так же за тем исключением, что не добавляет переход на следующую строку, то есть последующий консольный вывод будет выводиться на той же строке.

string name = "Tom"; int age = 34; double height = 1.7; Console.Write($"Имя: Возраст: Рост: м");

Консольный ввод

Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine() . Он позволяет получить введенную строку.

Console.Write("Введите свое имя: "); string? name = Console.ReadLine(); Console.WriteLine($"Привет ");

В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine() передается в переменную name.

Пример работы программы:

Введите свое имя: Том Привет Том

Особенностью метода Console.ReadLine() является то, что он может считать информацию с консоли только в виде строки. Кроме того, возможная ситуация, когда для метода Console.ReadLine не окажется доступных для считывания строк, то есть когда ему нечего считывать, он возвращаает значение null , то есть, грубо говоря, фактически отсутствие значения. И чтобы отразить эту ситуацию мы определяем переменную name , в которую получаем ввод с консоли, как переменную типа string? . Здесь string указывает, что переменная может хранить значения типа string, то есть строки. А знак вопроса ? указывает, что переменная также может хранить значение null , то есть по сути не иметь никакого значения. Далее мы более подробно разберем null и как с ним работать.

Однако, может возникнуть вопрос, как нам быть, если, допустим, мы хотим ввести возраст в переменную типа int или другую информацию в переменные типа double или decimal? По умолчанию платформа .NET предоставляет ряд методов, которые позволяют преобразовать различные значения к типам int, double и т.д. Некоторые из этих методов:

  • Convert.ToInt32() (преобразует к типу int)
  • Convert.ToDouble() (преобразует к типу double)
  • Convert.ToDecimal() (преобразует к типу decimal)

Пример ввода значений:

Console.Write("Введите имя: "); string? name = Console.ReadLine(); Console.Write("Введите возраст: "); int age = Convert.ToInt32(Console.ReadLine()); Console.Write("Введите рост: "); double height = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите размер зарплаты: "); decimal salary = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine($"Имя: Возраст: Рост: м Зарплата: $");

При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания. ), в других — запятая (Россия, Германия. ). Например, если текущая ОС — русскоязычная, значит, надо вводить дробные числа с разделителем запятой. Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.

Пример работы программы:

Введите имя: Том Введите возраст: 25 Введите рост: 1,75 Введите размер зарплаты: 300,67 Имя: Том Возраст: 25 Рост: 1,75м Зарплата: 300,67$

Ввод слова и чисел через запятую

Author24 — интернет-сервис помощи студентам

Помогите пожалуйста решить задачу.
Мне нужно написать интерактивный калькулятор матриц.
Я застрял в одном месте.

Пользователь вводит строку типа:
read_mat MAT_A,2,4,5,6.5,7,8,9.

read-mat это команда, MAT_A это название матрицы (4х4) в которую нужно внести данные, а дальше собственно идут числа (double), которые нужно внести в эту матрицу (двумерный массив).
Чисел может быть максимум 16, так как матрица 4х4. Если пользователь ввел меньше 16 чисел, то остальное -нули.

Если название матрицы неправильное, то я ему (пользователю) должен это сообщить (no such matrix name).

Собственно меня интересует часть строчки MAT_A,2,4,5,6.5,7,8,9.

Проблема в том, что разделитель тут не пробел, а запятая. Кроме того, кол-во чисел может быть разным (но не более 16).

Как мне ее (строку) распарсить? Какой командой считать строчку? Считать в массив всю строчку с запятыми, а потом парсить? На этом я и застрял.

Заранее спасибо за помощь.

Добавлено через 26 минут
забыл добавить, что нужна проверка, что название матрицы правильное, и что дальше идут именно числа (int или double)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *