|
0 / 0 / 0
Регистрация: 04.07.2016
Сообщений: 69
|
||||||
Конвертация во float и совместимость win 10 с win (7 и xp)31.01.2019, 09:39. Показов 2221. Ответов 25
Всем привет. Есть код написанный в борадатые года и отлично работающий на win 10.
В общем не давно заметил что на win 7 он перестал работать, хотя изначально для неё и разрабатывался.
str2 = 3023.78; Ошибка возникает только на win 7 и XP с str2. Пишет что “3023.87’ is not a valid floating point value На 10 такой ошибки нет. Системный разделитель я проверил. Стоит . Подскажите в чем может быть дело ?
0
|
||||||
| 31.01.2019, 09:39 | |
|
Ответы с готовыми решениями:
25
Совместимость Win XP и Win 2000 при взаимодействии с консолью После обновления Win 8.1 до Win 10, можно ли поставить старую Win 8.1 на другой ПК ? Конвертация кодировки DOS в Win |
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 31.01.2019, 10:21 | |
|
Скриншот окна ошибки покажите. И что это за странные кавычки в коде? Приведенный код не скомпилируется.
0
|
|
|
0 / 0 / 0
Регистрация: 04.07.2016
Сообщений: 69
|
|
| 31.01.2019, 11:39 [ТС] | |
|
Ковычки такие из-за того что с телефона печатал
0
|
|
|
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
|
||||||
| 31.01.2019, 11:45 | ||||||
|
Bag_ali, в сообщении об ошибке видно, что перед цифрами в тексте стоит как минимум один пробел. Вероятно, метод Trim() не применился.
Попробуй вторым параметром в функцию передать
0
|
||||||
|
51 / 39 / 15
Регистрация: 20.09.2018
Сообщений: 163
|
|
| 31.01.2019, 12:15 | |
|
это фотка криво сделана или в сообщении об ошибке после числа стоит одинарная кавычка?
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 01.02.2019, 11:12 | |
|
Надо сначала привести оба числа к float, а только потом сравнивать. Сразу будет понятно если где всплывет ошибка (в моменте преобразования из строки).
Еще можно попробовать посчитать количество символов непосредственно перед преобразованием: если в строке "3023.78" будет более семи символов, значит худо.
0
|
|
|
2645 / 1656 / 267
Регистрация: 19.02.2010
Сообщений: 4,385
|
||
| 01.02.2019, 16:28 | ||
|
Ибо любая стандартная библиотечная конверташка сделана под максимально возможную точность (избыточная точность результата обрезается уже операцией присваивания). Например, ANSI C/C++-конверташки из строки в плавучку atof(), strtod() возвращают дабл. Т.е. проглотят и полтора десятка значащих цифр. А StrToFloat - аж long double возвращает (т.е. 80 бит вместо 64рёх обычного дабла). Возвращающих флоаты аналогов этих функций - в базовых/стандартных библиотеках просто нет! Т.е. всякие "худо" (например, строку не из цифр и прочее) надо ловить по-иному, обработчиками исключительных ситуаций или анализом возвращённых функцией результатов.
0
|
||
|
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
|
|
| 01.02.2019, 22:40 | |
|
VTsaregorodtsev, Причём тут точность? Речь же шла о проверке того, что в функцию передаётся строка, которая помимо числа содержит ещё какой-то мусор.
А вообще, данной теме уделено уже неоправданно много внимания. Ошибка из одного ряда с пропущенной ";". При том, что ТС, вероятно, либо уже решил проблему, либо не очень-то ему это и нужно.
0
|
|
|
694 / 7008 / 265
Регистрация: 11.08.2016
Сообщений: 3,947
|
|
| 01.02.2019, 22:50 | |
|
Посмотри, какой десятичный разделитель выставлен в системе. StrToFloat по умолчанию переводит с тем, который выставлен в винде. Если в винде стоит запятая, с точкой не прокатит.
0
|
|
|
2645 / 1656 / 267
Регистрация: 19.02.2010
Сообщений: 4,385
|
||
| 02.02.2019, 19:56 | ||
|
Где там у него было про проверку на мусор? А вот идея проверки того, что "нельзя впихнуть невпихуемое" - у него была. Но - с предлагаемым порогом (7 символов-цифр), актуальным ТОЛЬКО для флоата. Хотя все предусмотренные СТАНДАРТАМИ ЯЗЫКА и его библиотек конвертеры строки в плавучку - возвращают дабл или лонг дабл. Усечение точности - происходит уже при присваивании результата переменной в памяти. Да и sscanf/swscanf, где в строке формата можно сразу попросить сохранить именно во флоат, внутри себя тоже могут сначала конвертировать в дабл - и только потом будут пытаться упихивать результат в требуемый строкой формата флоат. И если не возникнет переполнения - всё будет ОК. Т.е. высказанное SatanaXIII требование о не более чем 7 цифрах в строке - не является обязательным для неуспеха конвертации. Что я и отметил. Причём я мог и другой, более простой пример привести. Например, спросить, отчего это должна быть неуспешной конверсия строки "0.000000000000001", если 1е-15 вполне по силам флоату?
0
|
||
|
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
|
||
| 03.02.2019, 12:05 | ||
|
О каком вообще усечении точности может идти речь при ошибке "is not a valid floating point value"? Программа не приняла строку, а до работы с числовыми форматами дело вообще не дошло.
0
|
||
|
2645 / 1656 / 267
Регистрация: 19.02.2010
Сообщений: 4,385
|
||
| 03.02.2019, 20:00 | ||
|
Что, примера про "0.000000000000001" == 1е-15 не хватает, и мне надо напомнить, что и 10^-38, и 10^38 всё ещё влезают во флоат, не говоря уж про дабл? Почти 40 символов будет в "обычной"=неэкспоненциальной строковой записи таких чисел - и ни у кого никаких проблем. В общем, различайте символы в числе как строке - и значащие цифры в числе. И ещё. Я вот гляжу в справку по StrToFloat (раз ТС её юзает - будем в этих рамках держаться) - и вижу, что там чёрным по белому написано про Leading and trailing blanks are ignored. Т.е. пробелы по обе стороны от числа - допустимы, и сами по себе успешность конвертации такие пробелы не влияют. Поэтому умоляю - не начинайте придумывать очередную сказку, что пробелы != символы ![]() Фактически, я уже третьим способом опровергаю ересь про необходимость 7 символов - может, всё-таки признаетесь в грехах и покаетесь?
0
|
||
|
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
|
||||
| 03.02.2019, 21:47 | ||||
|
В сообщении об ошибке чёрным по серому написано: "is not a valid floating point value". Не "floating point overflow".
0
|
||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 04.02.2019, 09:36 | |
|
VTsaregorodtsev, очень хорошо, что вы обладаете знаниями о том, какие числа влазят во флоат, а так же стремлением делиться этими знаниями. Умение читать справку так же очень полезно, но умение читать ее внимательно бывает еще полезнее - не только пробелы могут передаваться параметром в StrToFloat, но и любые другие непечатные символы. И при внешнем кажущемся сходстве строк с непечатными символами, суть их может сильно различаться, и не каждая функция - в частности StrToFloat - производит подобную полную проверку своих строковых параметров.
Когда я предлагал проверить именно длину передаваемой в функцию строки - эти пресловутые "7 символов-цифр", то смысл этого был как раз в том, чтобы выяснить не затесались ли в строку непечатные символы. Вот вы предлагаете в подобных ситуациях использовать выбрасывание исключений или анализ возвращаемых значений функции. Допустим мы выбрали ловлю исключений: оборачиваем вызов StrToFloat в try-catch блок и получаем ожидаемое EConvertError. Дальше что? Мы очень здорово и на высоком профессиональном уровне получили ровно такой же результат, как и в отладчике глазами. Но допустим мы выбрали обработку результата из функции: пишем метод, получающий строку и внутри себя вызывающий в try-catch блоке StrToFloat, и в секции catch возвращающий, например, false. Запускаем, получаем false и аплодируем себе стоя. Мы молодцы. Мораль: главное не сколько знаний и умений мы имеем, не то, как мы лихо их демонстрируем, а то, что если мы не стараемся решить проблему, а просто сотрясаем воздух, то это и есть худо.
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||
| 04.02.2019, 13:37 | |||
|
Вот попробуйте предложите что-нибудь тс, чтобы выяснить в чем именно ошибка. И еще раз: нужно предложить тс решение или путь поиска этого решения, а не гипотезировать сидеть.
0
|
|||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 04.02.2019, 14:49 | |
|
0
|
|
|
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
|
||
| 04.02.2019, 14:58 | ||
|
У ТС в коде и OLE, и ADOQuery. Причём значение из ADOQuery извлекается как "AsFloat" и тут же передаётся в StrToFloat. Так что появление мусора не удивляет.
0
|
||
| 04.02.2019, 14:58 | |
|
Помогаю со студенческими работами здесь
20
Конвертация DBF из DOS в Win Конвертация unicode в win-1251 Python 2.7 совместимость функции с win 10 Совместимость компонентов и команд Win XP - 7. TStringGrid Совместимость hdd больше 2Tb с win 7 32bit Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|