Функция StrToFloat конвертирует числовую строку FloatString, например ‘123.456’ в значение с плавающей точкой с типом Extended. Она поддерживает целый формат, формат с плавающей точкой и научный (экспоненциальный) формат.
Второй вариант этой функции предназначен для использования в потоках. Перед вызовом функции вы должны заполнить запись FormatSettings. Функция делает локальную копию глобальных переменных форматирования, что делает ее потокобезопасной.
Примечания
Исключение EConvertError будет вызвано, если есть ошибки в FloatString, таких как конечных пробелов или недопустимых десятичных символов.
Похожие команды
Extended Тип с плавающей запятой обладающий самой высокой точностью и вместимостью
FloatToStr Преобразует значение с плавающей запятой в строку
FloatToStrF Преобразует значение с плавающей запятой в строку с форматированием
TFormatSettings Запись для содержания региональных значений для thread-safe функций
Strtofloat delphi что это
Преобразование числа с плавающей точкой (далее в этом разделе просто числа) в текстовую строку и обратно всегда было достаточно сложной задачей. Для ее решения в Delphi есть функции сразу трех уровней сложности.
Первый — самый простой — представлен функцией FloatToStr:
function FloatToStr( Value : Extended): string ;
Число, заданное параметром Value, преобразуется в возвращаемую функцией строку. Формат преобразования соответствует типу преобразования g функции Format, причем длина выходной строки принимается равной 15 символам.
Больше возможностей для управления форматом вывода дает функция:
function PloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string ;
Здесь Value — преобразуемое значение, Format — один из предопределенных форматов. Хотя этот параметр имеет тип TFloatFormat, он имеет очень много общего с типами преобразований в функции Format (ссылки на них есть в предлагаемой таблице). Параметр Precision задает общее число символов в выходной строке и не должен превышать 7 для фактического параметра типа Single, 15 — для Double и 18 — для Extended. Digits — это параметр, интерпретируемый в зависимости от значения параметра Format:
ffExponent Научный формат, соответствует типу е. Precision задает общее число символов, Digits — число знаков в показателе экспоненты <0-4).
ffFixed Формат с фиксированной точкой; соответствует типу f. Precision задает общее число символов, Digits — число знаков после запятой (0-18). Если значение Precision мало для представления числа, используется научный формат.
ffGeneral Обобщенный формат, соответствует типу д (см. описание функции Format).
ffNumber Отличается от fTFixed наличием символов-разделителей тысяч (см. тип преобразования п).
ffCurrency Соответствует типу преобразования т. Параметр Digits задает число символов после десятичной точки в выходной строке (0-18).
В случае, когда в функцию переданы значения Value, соответствующие особым случаям сопроцессора («не-число», плюс и минус бесконечность), она возвращает соответственно строки ‘NAN’, ‘INF’ и ‘-INF’.
Наконец, возможность полного управления форматом предоставляет функция FormatFloat:
function FormatFloat(const Format: string; Value: Extended): string;
Она преобразует число в строку в соответствии со спецификатором формата, содержащимся в параметре Format. Правила его задания следующие:
0 Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае вставляется 0.
# Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае ничего не вставляется.
Поле для десятичной точки. Сюда вставляется символ, определенный константой DecimalSeparator.
; Поле для разделителя тысяч. Оно означает, что группы по три цифры, считая влево от десятичной точки, будут разделяться специальным символом (он задан константой ThousandSeparator). Местоположение поля может быть произвольным.
Е+, Е-, е+, е- Признаки представления числа в научном формате. Появление любого из этих аргументов означает, что число будет преобразовано с характеристикой и мантиссой. Вставка нулей после такого аргумента позволяет определить ширину мантиссы. Разница между Е+, е+ и Е-, е-в том, что в первых двух случаях ставится «+» при выводе положительных чисел.
‘хх’ «хх» Символы, заключенные в обычные или двойные кавычки, напрямую включаются в выходную строку.
; Разделяет спецификаторы формата для положительных, отрицательных и нулевых чисел.
1. Число всегда округляется до той точности, которую позволяет заданное программистом количество полей для размещения цифр (‘0’ и ‘#’).
2. Если у преобразуемого числа слева от десятичной точки получается больше значащих цифр, чем задано полей для их размещения, то цифры все равно добавляются в строку. Если полей недостаточно справа от точки, происходит округление.
3. Символ ‘;’ позволяет задать три разных формата вывода для чисел с разным знаком. При различном количестве форматов они применяются следующим образом:
• один: применяется для всех чисел;
• два: первый применяется для чисел, больших или равных нулю, второй — для отрицательных;
• три: первьш применяется для положительных, второй — для отрицательных чисел, третий — для нуля.
Если форматы для отрицательных чисел или нуля пусты, применяется формат для положительных чисел.
Если пуст формат для положительных чисел или спецификатор формата вообще не задан (пустая строка), то числа форматируются согласно обобщенному формату (как в функции FloatToStr). Такое форматирование применяется также в случае, если число значащих цифр слева от десятичной точки превысило 18 и не задан научный формат.
Применение спецификатора иллюстрируется в таблице на примере преобразования четырех чисел:
#,##0.00;(#,##0.00) 1,234.00 (1,234.00) 0.50 0.00
Две следующие функции применяют те же правила, что и рассмотренные выше функции, но отличаются параметрами:
Соответствует FloatToStrF, но выходная строка помещается в буфер Buffer (без начальной длины!), а число символов в ней возвращается самой функцией.
function FloatToTextFmt(Buffer: PChar; Value: Extended; Format: PChar): Integer;
Соответствует FormatFloat, но выходная строка помещается в буфер Buffer (без начальной длины!), а число символов в ней возвращается самой функцией.
procedure FloatToDecimal( var Result: TFloatRec; Value: Extended; Precision, Decimals: Integer);
Производит подготовительный анализ преобразуемого числа, занося в поля записи Result различные его характеристики.
Перейдем к рассмотрению функций преобразования текстовой строки в число. Их две — соответственно для строк типа string и PChar:
function StrToPloat( const S: string ): Extended;
function TextToFloat(Buffer: PChar; var Value: Extended): Boolean;
Общие правила для передаваемой в функцию строки таковы:
• допускаются как научный, так и фиксированный форматы;
• в качестве десятичной точки должен выступать символ, который содержится в DecimalSeparator;
• не допускаются символы-разделители тысяч (ThousandSeparator), а также символы обозначения денежньк единиц.
В случае ошибки преобразования функция StrToFloat генерирует исключительную ситуацию EConvertError, a TextToFloat — возвращает значение False.
Преобразования типов
Преобразования типов
Пользователь воспринимает это так, будто вводит сразу цифры, однако мы то знаем, что это строка только символов, изображающая число. И чтобы действительно превратить ее в число, приходится использовать преобразования типов. Некоторыми функциями, которые служат этим целям, мы уже пользовались, давайте упорядочим эти знания и изучим новые функции.
IntToStr()
StrToInt()
FloatToStr()
Эта функция также предназначена для всех типов вещественных чисел.
StrToFloat()
FormatFloat()
Она имеет два параметра – строку формата и само число. Строка может содержать следующие форматы:
Таблица 15.1. Возможные форматы FormatFloat()
Строка, указываемая в формате
Примеры чисел
1234
-1234
0,5
0
0
1234
-1234
1
0
0.00
1234,00
-1234,00
0,50
0,00
#.##
1234
-1234
0,5
0
#,0.00
1 234,00
-1 234,00
0,50
0,00
Есть и другие варианты форматов, например, для представления числа в экспонентной форме, но они, как правило, не используются.
Поясним строку форматов подробней.
В первом случае показаны варианты возвращаемых строк, если строка форматов вообще не указана.
«Решетка» (#) работает также, как «ноль», с той разницей, что если на этом месте не окажется цифры, то «решетка» ничего не выведет, а «ноль» подставит в это место ноль.
Знак запятая здесь указывают для удобного отображения разрядности числа. Например, миллион будет выглядеть как строка ‘1 000 000’. Заметим, что на само число этот формат не оказывает никакого влияния, он нужен только для того, чтобы выводить число в удобочитаемой форме в виде строки.
Вопросы и ответы
Я записан на программу. Куда высылать договор и диплом?
Во-первых, разрешите поблагодарить Вас за замечательный курс, который я прошёл с удовольствием.
В 32 лекции при изучении работы с индексами и фильтрами у меня возникла ошибка.
Исходные данные: система Windows 10.
Database Desktop не заработал (ни под админом, ни в режиме совместимости).
Поэтому сделал базу в MS Access, подключил её к приложению через ADO Connection и таблицы ADO Table + DataSource. Провайдер Microsoft.Jet.OLEDB.4.0.
Всё работает как надо, кроме индексов (сортировки) и фильтрации.
Текст ошибки: «Текущий поставщик не поддерживает необходимый интерфейс для функции ‘Index’ «.
Советы из форумов не сработали.
Пробовал: устанавливать курсор на стороне сервера, перечислять индексируемые поля в IndexFieldNames, выбирать других провайдеров OLE DB. Ничего не получилось.
Может подскажете какой-нибудь выход?
В рабочей программе, выберу другую СУБД, но хочется ведь чтобы и учебные примеры заработали (для меня это значит, что тема усвоена).
С уважением, Аюпов Рустэм.
Update: решил для себя эту проблему установкой в виртуалку WinXP 32. Database Desktop завёлся, всё получилось.
5 Minute Snack: Reading floats with StrToFloat and TFormatSettings independent of system region settings
This is one of the topics that sadly shows up mostly at run-time when you already deployed the app to your customers.
We all have our development machine. Our application works just fine. And then we deploy to the customer and the customer says that he gets an error that “12,5 is not a valid float value”.
Why is it 12,5 you wonder… on your system it is always 12.5 and works just fine.
Well, different regions different ways to write a number. In Europe most countries use “,” (comma) as a decimal separator and “.” as a thousand separator. In the United States of America it is exactly vice versa.
It gets even more complicated if you have to read a number from a string that is produced by a device that always formats numbers a certain way no matter what and you have to make sure that your application is able to interpret these numbers.
Here’s how Delphi tries to parse a string into a float: Delphi uses the local regional settings of the user profile the application runs in. This means if your application runs on a US-based system without any individual changes the decimal separator most likely will be “.”. If your application is run on a system in Germany, Delphi will use “,” as a decimal separator.
How you say what Delphi shall use: Let me just start with this. I have seen so many strange things to solvet his issue, it made me dizzy sometimes. There’s people rewriting registry settings to get it done and trying to load different regional configurations using the Win API… the sky seems to be the limit.
However, the solution is so easy if you have a look at the different fingerprints of the StrToFloat method:
There is the option to specify a setting of type TFormatSettings as the second parameter for the parse operation. And that is already the solution. TFormatSettings is a record that is designed to hold regional settings of all sorts. Date and Time formats, day names, number formats — all you need.
And if you look at the source….
…you even get information what different methods can be used to fill the record with data.
If you know that your external device will deliver measurement data in US format all the time, i.e. with ‘.’ as a decimal separator and you want to make sure that Delphi knows it you need to create TFormatSettings either with a US-locale or you can also create one based on your system and set the delimiter manually. You have the option.
Here we create the record for US settings:
Alternatively, you can say:
So, whenever you encounter a string that has “12.5” as a number it will be able to parse that number no matter on what system your application runs.
Once you know that you have TFormatSettings at your disposal it becomes really easy.
Strtofloat delphi что это
4.1. Функции преобразования типов данных
ФункцииStrToInt()иStrToFloat(). Преобразовывает строковое значение в числовое, аргументом является строка, а значением – целое StrToInt(Строка) или вещественное StrToFloat(Строка) число. Применяются при вводе чисел в текстовые поля для преобразования строкового значения свойства Text в число, которое затем используется в вычислениях. ФункцииIntToStr(),FloatToStr(),IntToHex(). Функции IntToStr(Число) и FloatToStr(Число) позволяют производить преобразование десятичных чисел в десятичные числа в строковой форме, а функция IntToHex(Число)- переводить десятичные числа в шестнадцатеричные в строковой форме. Аргументом функции является десятичное число, а значением – строка:
Проект «Перевод чисел». Создать проект, который позволит переводить целые числа из десятичной системы счисления в шестнадцатеричную и, обратно, из шестнадцатеричной в десятичную.
Перевод десятичного числа в шестнадцатеричное. Для перевода десятичного числа, введенного в текстовое поле Edit1, в шестнадцатеричное число будем переводить сначала его из строковой формы в числовую, с помощью функции StrToInt(), а затем из десятичной числовой в строковую шестнадцатеричную с помощью функций IntToHex().
Перевод шестнадцатеричного числа в десятичное. Для перевода шестнадцатеричного числа, введенного в текстовое поле Edit2, в десятичное число будем переводить сначала его из строковой формы в числовую, с помощью функции StrToInt(), а затем из шестнадцатеричной числовой в десятичную строковую с помощью функций IntToStr().
4.2. Математические функции
В математических функциях значениями, как аргументов, так и функций являются числа. В языке программирования Delphi имеется 13 математических функций:
Функция
Аргумент функции х
Возвращаемое функцией значение
Sin(х)
Число (в радианах)
Синус числа
Cos(х)
Число (в радианах)
Косинус числа
Arctan(х)
Число
Арктангенс в радианах
Sqr(х)
Неотрицательное число
Квадрат числа
Sqrt(х)
Число
Квадратный корень из числа
Ln(х)
Число
Натуральный логарифм числа
Exp(х)
Число
Экспонента числа
Random(х)
Число
Псевдослучайное число N (0
П роект «Инженерный калькулятор». Воспользоваться математическими функциями для расширения возможностей проекта «Обычный калькулятор» и превращения его в проект «Инженерный калькулятор».
Для каждой из этих кнопок создать событийные процедуры, реализующие вычисление соответствующих функций: синус, косинус, квадрат, квадратный корень и натуральный логарифм.
Любовь замужней женщины — великая вещь. Женатым мужчинам такое и не снилось.Оскар Уайльд ещё >>