Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 359
RAD XE3+

Решено. Как узнать разделитель дроби в вещественных числах

08.11.2023, 05:32. Показов 3908. Ответов 66

Студворк — интернет-сервис помощи студентам
Win7-64
Delphi 10.3
При обработке строки в число StrToFloat у меня возникала ошибка, проблема старая, это точка или запятая, смотря какая настройка. В старых версиях до XE6, это решалось глобальной переменной DecimalSeparator, но потом ее убрали. Есть предложения в тырнете ставить принудительно разделитель, но оказывается, через час-два настройки слетали на умолчание, так что нужно только чтение. Свежее решение от 2023 года было нагуглено. Сейчас все конвертится нормально.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Function CheckString (S: string): string; // Проверяем Edit поля при ручном вводе
 var
 a: integer;
 SS: char;
 fs: TFormatSettings;
 begin
    fs:=TFormatSettings.Create(GetThreadLocale());
    GetLocaleFormatSettings(GetThreadLocale(),fs);
    SS:= fs.DecimalSeparator; // читаем (точка-запятая) в вещественных числах
  for a:= Length (S) downto 1 do if s[a] in ['.', ',', '0'..'9'] then else Delete (s, a, 1); //удаляем пробелы и прочее
  for a:=1 to Length (S) do if S[a]  in [',', '.'] then S[a] := SS; // ставим правильный разделитель 
  Result:= S;
 end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2023, 05:32
Ответы с готовыми решениями:

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

Как определить разделитель десятичной дроби (decimal separator) Visual C++ 2008
И сразу ответ: String ^Separator = System::Globalization::NumberFormatInfo::CurrentInfo->CurrencyDecimalSeparator; Когда нужно...

Разделитель в числах с плавающей точкой
Здравствуйте, у меня есть интересный вопрос :) Всем известно, что в переменной типа double могут храниться такие числа, как 0.30, но...

66
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 359
11.11.2023, 13:50  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AzAtom Посмотреть сообщение
но ты так не хочешь
Выше мое сообщение про TryStrToFloat прочитать никак ? 2 раза уже сказал про это
0
Модератор
4150 / 2360 / 813
Регистрация: 15.11.2015
Сообщений: 9,489
11.11.2023, 14:00
Цитата Сообщение от 119zero Посмотреть сообщение
Выше мое сообщение про TryStrToFloat прочитать никак ?
Читал. Это прикол, наверное?

Цитата Сообщение от 119zero Посмотреть сообщение
try exept ? Я быстро проверил, чота не работает, не стал копать почему.
"Весь завод чувствует, а он не чувствует"?

Цитата Сообщение от 119zero Посмотреть сообщение
Есть еще TryStrToFloat, больше вариантов нет, я через него хотел сделать, но в гугле буржуи что-то недовольны на него.
Чем конкретно не довольны? Что там не так? И зачем нам какие-то мифические буржуи в гугле? Я часто использую этот TryStrToFloat/TryStrToInt и ошибок не замечено.
1
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 359
11.11.2023, 14:08  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Чем конкретно не довольны? Что там не так?
Просто подумал, что проще сразу напрямую вставлять DecimalSeparator в строку, иначе сначала проверить через TryStrToFloat, а потом все равно DecimalSeparator надо вставлять, это лишние движения...
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
11.11.2023, 15:09
Цитата Сообщение от 119zero Посмотреть сообщение
это лишние движения
Так в программировании далеко не уедешь.
1
 Аватар для cyberGlod
13 / 11 / 2
Регистрация: 11.10.2023
Сообщений: 138
11.11.2023, 15:42
> это лишние движения...

Я бы просто проинформировал юзера, что он лопухнулся и ввел кривое число (чтобы лишние движения мне не пришлось делать).
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,745
Записей в блоге: 7
11.11.2023, 17:17
Цитата Сообщение от cyberGlod Посмотреть сообщение
что он лопухнулся и ввел кривое число
Это не кривое число, это нормальная ситуация.
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 359
11.11.2023, 20:44  [ТС]
Цитата Сообщение от cyberGlod Посмотреть сообщение
Я бы просто проинформировал юзера
Не надо нервировать людей, им работать надо на работе, а дома отдыхать ! Есть одна известная бесплатная прога, которая постоянно предлагает что-то поменять, а народ не в курсе, что что именно, им надо тут тыркнуть и фсе. Вот ее сейчас и переписываю попроще, поэтому и приспичило меня с этим разделителем, явно у кого-то еще запятая есть, включая меня. Сначала я сделал, как придумалось, без всяких извращений:

Delphi
1
2
3
4
5
begin
A:=0.01;
B:=FloatToStr(A);
if B[x] = [','] then...
end;
Дальше смотрел, что там в разделителе, запятая или точка. Не прокатило, Дельфи понимает только точку, ее и показывает. Винда понимает точку или запятую, в зависимости от региональных настроек, вот такой прикол, пришлось гуглить, теперь работает нормально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2023, 20:44
Помогаю со студенческими работами здесь

Как заставить выводить точку в вещественных числах?
JavaScript-код требует точки в качестве разделителей дробной и целой частей. Как формат настроить? Я не могу передать значения в массив...

Програмно изменить Регион и разделитель в числах в Windows
Програмно изменить Регион и разделитель в числах в Windows В региональных настройках системы

Как узнать разделитель в файловой системе?
Отака фигня: public static String slash() { String s = ""; File f = new File("/home"); ...

(Решено) Как я могу узнать размер экрана в пикселях?
(Решено) День добрый. Возникла необходимость получить размер экрана в пикселях. Подскажите пожалуйста как я могу это с делать при...

Точка и запятая в вещественных числах
Такие непонятки с точкой и запятой : sprintf(dest, "%0*.*f", 8, 4, 2.5 ); std::cout<<dest; std::cout<<(int)dest; ...


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

Или воспользуйтесь поиском по форуму:
67
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru