Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
1 / 1 / 1
Регистрация: 22.07.2017
Сообщений: 121

Как считывать с формы числа с точкой вместо запятой?

08.02.2018, 23:03. Показов 5172. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим есть на форме элемент TEdit. Я ввожу туда значение "0.1".
Вывожу с него значение следующим образом:
a = StrToFloat(Form->TEdit->Text);
Но в этом случае выскакивает сообщение о том, что "0.1" is not a valid floating point value.
То есть числа в формате "xxx,xxx" билдер принимает, а "xxx.xxx" отказывается. Как обойти этот неприятный момент?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2018, 23:03
Ответы с готовыми решениями:

вывод числа double с точкой вместо запятой
Нужно вывести на экран число типа double так, чтобы вместо ',' в качестве разделителя была '.' Как сделать через преобразование в строку...

Как перевести double в string с точкой вместо запятой
делаю перевод типа double в string double X=0.5; string X_str; char szbuff; sprintf(szbuff, "%g", X); ...

Десятичное число с точкой вместо запятой
Всем привет. В запросе на обновление используется след. выражение: & "BillsDetails.PriceDiscount = *IIf(/100>=" & DV &...

10
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
08.02.2018, 23:15
Лучший ответ Сообщение было отмечено Insomnia4ever как решение

Решение

C++
1
a = StrToFloat(StringReplace(Form->TEdit->Text, ".", ",", TReplaceFlags() << rfReplaceAll));
, так будет читаться и с запятой и с точкой. Если изначально локаль подразумевает именно точку, как разделитель - то надо поменять код на
C++
1
a = StrToFloat(StringReplace(Form->TEdit->Text, ",", ".", TReplaceFlags() << rfReplaceAll));
1
1 / 1 / 1
Регистрация: 22.07.2017
Сообщений: 121
08.02.2018, 23:25  [ТС]
volvo, спасибо, работает. Только обе ваши строчки кода не отличаются друг от друга

Добавлено через 1 минуту
Так, тупанул. Нашёл отличие. Ещё раз спасибо.
0
36 / 35 / 17
Регистрация: 15.06.2017
Сообщений: 184
09.02.2018, 01:02
Я использую конструкцию
C++
1
2
3
4
5
   AnsiString ads=FormatSettings.DecimalSeparator;     //store system float separator
   FormatSettings.DecimalSeparator = '.';   //change system float separator to correct calc
    //произвел обработку...
 
   FormatSettings.DecimalSeparator = ads;
Добавлено через 17 минут
Это, конечно, не совсем по теме, но бывает необходимость установить системный разделитель на ".", особенно когда считываешь текстовый файл с числами
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
09.02.2018, 01:03
Вставлю свои 5 копеек. Конструкция
C++
1
FormatSettings.DecimalSeparator;
позволит выяснить, какой символ используется системой в качестве десятичного разделителя (целой и дробной части).

P.S.: долго я пишу...
0
 Аватар для Intel4004
10 / 10 / 0
Регистрация: 27.04.2015
Сообщений: 39
09.02.2018, 22:03
C++
1
2
3
4
5
6
7
8
9
10
double ToDouble(AnsiString String)
{
int Pos;
AnsiString Delimiter = ".,";
while ((Pos = Delimiter.Pos(DecimalSeparator)) != 0)
  Delimiter.Delete(Pos,1);
while ((Pos = String.LastDelimiter(Delimiter)) != 0)
  String[Pos] = DecimalSeparator;
return String.ToDouble();  
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.02.2018, 22:55
По моему это делается так:
C++
1
2
3
TFormatSettings formatSettings;
formatSettings.DecimalSeparator = '.';
a = StrToFloat(Form->TEdit->Text,formatSettings);
0
 Аватар для keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 151
Записей в блоге: 2
15.02.2018, 16:43
Тогда и я выложу свой вариант. Примерно как и у всех, но я не меняю установки системы, а под них подстраиваюсь.
Примерно так это выглядит:

C++
1
2
3
4
5
AnsiString separ=FormatSettings.DecimalSeparator;
AnsiString str;
 
str = StrToFloat(StringReplace(Form->TEdit->Text, ".", separ, TReplaceFlags() << rfReplaceAll));
str = StrToFloat(StringReplace(Form->TEdit->Text, ",", separ, TReplaceFlags() << rfReplaceAll));
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
15.02.2018, 19:18
str = StrToFloat(StringReplace(Form->TEdit->Text, ".", DecimalSeparator, TReplaceFlags() << rfReplaceAll));
str = StrToFloat(StringReplace(Form->TEdit->Text, ",", DecimalSeparator, TReplaceFlags() << rfReplaceAll));
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
15.02.2018, 22:07
lifeforce, во второй строке надо заменить Form->TEdit->Text на str.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
15.02.2018, 23:31
Lelik-pahan, да все верно! замечание.
Я использую без доп стрингов.
по вот такой конструкции.


C++
1
2
Form->TEdit->Text = StringReplace(Form->TEdit->Text, ".", DecimalSeparator, TReplaceFlags() << rfReplaceAll);
Form->TEdit->Text = StringReplace(Form->TEdit->Text, ",", DecimalSeparator, TReplaceFlags() << rfReplaceAll);
поспешил с копи пастом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2018, 23:31
Помогаю со студенческими работами здесь

Как прописать так, чтобы не было возможности вводить числа с запятой/точкой
Как прописать так, чтобы не было возможности вводить числа с запятой/точкой в С++ в консольных приложениях То есть была возможность...

Как считать числа типа double с запятой вместо точки
Нужно через fstream считать числа double. Если ставить точки после целой части, то считывает нормально, а при запятых начинаются проблемы

Нечитаемые числа (содержащие точку вместо запятой): как внедрить в вычисления
Здравствуйте! Подскажите пожалуйста , как исправить числа ,которые выглядят так 45,567.98 -на числа, с которыми могут работать формулы...

Ввод нецелого числа с запятой и точкой
В текстовое поле вводится число при нажатии кнопки производятся расчеты и выводится ответ. Если вводить челое число или число с запятой то...

Регулярное выражение на проверку числа с точкой или запятой
Доброго времени суток! Суть задачи такова: Нужно проверить число регуляркой, в случаи если число не проходит выдать ошибку. Какие...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru