В случае ввода вещественного числа через запятую, дробная часть отбрасывается.
То есть, если мы вводим в консоль 2.3, то получим 2.0, а если введём 2,3 получим само число 2,3
Как исправить данную проблему?
Другие языки программирования и технологии
Ввод значений с плавающей точкой через запятую C++.
Потому что разделитель целой и дробной части locale-зависимый (в русскоязычной Windows это символ "запятая", а в американской - символ "точка", в других версиях может быть еще какой-то символ).
Поэтому, если вы хотите, чтобы там принималось все что угодно (точка, запятая, пробел) вам возможно стоит написать свой велосипед, который найдет первую не цифру после цифры, принять ее за разделитель, разделить введенную строку на две строки, которые будут целой частью и частью после разделителя, потом их преобразовать в числа и математическими операциями соединить.
А менять системные настройки (символ разделителя в Панели управления) только лишь ради одной программы чревато проблемами в других программах, которые возможно тоже написаны однобоко и в расчете на то, что разделитель тот, который ожидается программистом.
Поэтому, если вы хотите, чтобы там принималось все что угодно (точка, запятая, пробел) вам возможно стоит написать свой велосипед, который найдет первую не цифру после цифры, принять ее за разделитель, разделить введенную строку на две строки, которые будут целой частью и частью после разделителя, потом их преобразовать в числа и математическими операциями соединить.
А менять системные настройки (символ разделителя в Панели управления) только лишь ради одной программы чревато проблемами в других программах, которые возможно тоже написаны однобоко и в расчете на то, что разделитель тот, который ожидается программистом.
Один из вариантов решения проблемы: включить настройки русского языка
setlocale(LC_ALL, ""); // использовать язык из настроек ОС
или
setlocale(LC_ALL, "Russian");
После этого для ввода чисел надо будет использовать только запятую.
Другой вариант более надёжный: вводить число как строку, заменять запятую на точку, преобразовать строку в число при помощи функции stod или atof.
setlocale(LC_ALL, ""); // использовать язык из настроек ОС
или
setlocale(LC_ALL, "Russian");
После этого для ввода чисел надо будет использовать только запятую.
Другой вариант более надёжный: вводить число как строку, заменять запятую на точку, преобразовать строку в число при помощи функции stod или atof.
Prince_On_White Horse

Ввод дробных чисел через точку или запятую зависит от системы на которой исполняется программа. Если у вас русская версия Windows, ввод происходит через запятую, если у вас английская версия - через точку. Всё зависит от операционной системы, скорее всего сменить глобализацию программно можно, я бы сказал каким образом, но знаю только как это сделать в C#.
Prince_On_White Horse
А вот и нет.
У меня русская версия Windows, ввод с запятой вместо точки, отсекает дробную часть.
У меня русская версия Windows, ввод с запятой вместо точки, отсекает дробную часть.
Похожие вопросы
- С++ Проверка на некорректный ввод значения переменной
- Assembler - Числа с плавающей точкой
- Представить заданные вещественные числа А и В в формате с плавающей точкой.
- Вопросик по Pascal. Есть переменные A,B,C,D. Как сделать так, чтобы при вводе A выводилось цифра 1, B - 2, C-3, D-4?
- Delphi как сделать ввод только чисел с точкой ?
- Паскаль. Почему перед Else нельзя ставить точку с запятой?
- Чем отличается целое и длинное целое число от двойного с плавающей точкой? и сколько в каждом из них цифр
- Представить вещественные числа в четырёхбайтовой ячейке памяти в формате с плавающей точкой.
- Подскажите, я не понимаю. Говорят про сложность вычислений с плавающей точкой.
- Напишите пожалуйста функцию обмена значений двух переменных на си (не c++) для любого типа данных