TFloatFormat — Тип Delphi

Функции Delphi FormatFloat и Format

У меня есть приложение, в котором пользователи могут установить, как отображаются значения. Пользователи вводят строку форматирования, и компонент использует FormatFloat для отображения значения.

Но теперь мы используем новый сторонний компонент, который форматирует значения с использованием функции Format, и, конечно, ни один из наших пользовательских форматов не работает, поскольку функции Format и FormatFloat используют другой синтаксис.

Знает ли кто-нибудь о способе преобразования между этими двумя? Или, может быть, у кого-то есть код для этого?

Хотя строки формата для FormatFloat могут быть более или менее преобразованы в формат Format, вы можете получить реальное сходство для положительных значений. Метод Format просто не обеспечивает достаточной гибкости для использования функций и мелкозернистого управления, которые предлагают строки формата для метода FormatFloat.

Например, метод FormatFloat позволяет использовать три разных формата для положительных, отрицательных и нулевых значений. Кроме того, строки формата FormatFloat допускают строковые литералы, например. ‘#, ## 0,00;; Нулевой’; (это означает, что нулевые значения печатаются как «Zero» ).

Чтобы получить что-то подобное с помощью функции Format, вам самому нужно будет выполнить всю работу grunt, которую FormatFloat делает для вас через строку формата.

Итак, хотя я не против изменения сторонних источников управления, поскольку я против изменения источников vcl, я с Дэвидом на этом: найдите способ заставить сторонний элемент управления использовать функцию FormatFloat. Предпочтительно через пользовательский потомок или через класс интерполятора (также известный как класс перехватчика), но если это не удается, во что бы то ни стало, измените источник управления третьей стороной. Просто убедитесь, что вы правильно пометили измененные разделы, чтобы вы могли легко переделать его при переключении на новую версию этого элемента управления.

Справочник по компонентам Delphi. Часть 1
Страница 10. Функции преобразования чисел с плавающей точкой

Функции преобразования чисел с плавающей точкой

Преобразование числа с плавающей точкой (далее в этом разделе просто числа) в текстовую строку и обратно всегда было достаточно сложной задачей. Для ее решения в Delphi есть функции сразу трех уровней сложности.

Первый — самый простой — представлен функцией FloatToStr:

function FloatToStr ••-••-alue : Extended): string;

Число, заданное параметром Value, преобразуется в возвращаемую функцией строку. Формат преобразования соответствует типу преобразования g функции Format, причем длина выходной строки принимается равной 15 символам.

Больше возможностей для управления форматом вывода дает функция:

Здесь Value — преобразуемое значение, Format — один из предопре­деленных форматов. Хотя этот параметр имеет тип TFloatFormat, он имеет очень много общего с типами преобразований в функции Format (ссылки на них есть в предлагаемой таблице). Параметр Precision задает общее число символов в выходной строке и не должен превышать 7 для фактичес­кого параметра типа Single, 15 — для Double и 18 — для Extended. Digits — это параметр, интерпретируемый в зависимости от значения параметра Format:

Научный формат, соответствует типу е. Precision задает общее число символов, Digits — число знаков в показателе экспоненты <0-4).

Формат с фиксированной точкой; соответствует типу f. Precision задает общее число символов, Digits — число знаков после запятой (0-18). Если значение Precision мало для представления числа, используется научный формат.

Обобщенный формат, соответствует типу д (см. описание функции Format).

Отличается от fTFixed наличием символов-разделителей тысяч (см. тип преобразования п).

Соответствует типу преобразования т. Параметр Digits задает число символов после десятичной точки в выходной строке (0-18).

В случае, когда в функцию переданы значения Value, соответствующие особым случаям сопроцессора («не-число», плюс и минус бесконечность), она возвра­щает соответственно строки ‘NAN’, ‘INF’ и ‘-INF’.

Наконец, возможность полного управления форматом предоставляет функция FormatFloat:

Она преобразует число в строку в соответствии со спецификатором формата, содержащимся в параметре Format. Правила его задания следующие:

Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае вставляется 0.

Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае ничего не вставляется.

Поле для десятичной точки. Сюда вставляется символ, определенный константой DecimalSeparator.

Поле для разделителя тысяч. Оно означает, что группы по три цифры, считая влево от десятичной точки, будут разделяться специальным символом (он задан константой ThousandSeparator). Местоположение поля может быть произвольным.

Признаки представления числа в научном формате. Появление любого из этих аргументов означает, что число будет преобразовано с харак­теристикой и мантиссой. Вставка нулей после такого аргумента позволяет определить ширину мантиссы. Разница между Е+, е+ и Е-, е-в том, что в первых двух случаях ставится «+» при выводе положи­тельных чисел.

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

Разделяет спецификаторы формата для положительных, отрицательных и нулевых чисел.

1. Число всегда округляется до той точности, которую позволяет заданное программистом количество полей для размещения цифр (‘0’ и ‘#’).

2. Если у преобразуемого числа слева от десятичной точки получается больше значащих цифр, чем задано полей для их размещения, то цифры все равно добавляются в строку. Если полей недостаточно справа от точки, происходит округление.

3. Символ ‘;’ позволяет задать три разных формата вывода для чисел с разным знаком. При различном количестве форматов они применяются следующим образом:

• один: применяется для всех чисел;

• два: первый применяется для чисел, больших или равных нулю, второй — для отрицательных;

• три: первьш применяется для положительных, второй — для отрицательных чисел, третий — для нуля.

Если форматы для отрицательных чисел или нуля пусты, применяется формат для положительных чисел.

Если пуст формат для положительных чисел или спецификатор формата вообще не задан (пустая строка), то числа форматируются согласно обобщенному формату (как в функции FloatToStr). Такое форматирование применяется также в случае, если число значащих цифр слева от десятичной точки превысило 18 и не задан научный формат.

Применение спецификатора иллюстрируется в таблице на примере преобразо­вания четырех чисел:

TFloatFormat — Тип Delphi

уЕТЧЕТ РПДДЕТЦЙЧБЕФУС
ЛБЖЕДТПК ЙОЖПТНБФЙЛЙ Й ЧЩЮЙУМЙФЕМШОПК ФЕИОЙЛЙ зТзх
ФЕМ. +375-(0)152-445-101
E-mail : kadan@grsu.grodno.by

рТЕПВТБЪПЧБОЙЕ ЮЙУЕМ У РМБЧБАЭЕК ФПЮЛПК. жХОЛГЙС FormatFloat

оБЛПОЕГ, ЧПЪНПЦОПУФШ РПМОПЗП ХРТБЧМЕОЙС ЖПТНБФПН РТЕДПУФБЧМСЕФ ЖХОЛГЙС FormatFloat:

function FormatFloat(const Format: string;
Value: Extended): string;

пОБ РТЕПВТБЪХЕФ ЮЙУМП Ч УФТПЛХ Ч УППФЧЕФУФЧЙЙ УП УРЕГЙЖЙЛБФПТПН ЖПТНБФБ, УПДЕТЦБЭЙНУС Ч РБТБНЕФТЕ Format. рТБЧЙМБ ЕЗП ЪБДБОЙС УМЕДХАЭЙЕ:

рПМЕ ДМС ГЙЖТЩ. еУМЙ ЖПТНБФЙТХЕНБС ЧЕМЙЮЙОБ ЙНЕЕФ Ч ЬФПК РПЪЙГЙЙ ГЙЖТХ, ФП ЧУФБЧМСЕФУС ПОБ, Ч РТПФЙЧОПН УМХЮБЕ ЧУФБЧМСЕФУС 0.
# рПМЕ ДМС ГЙЖТЩ. еУМЙ ЖПТНБФЙТХЕНБС ЧЕМЙЮЙОБ ЙНЕЕФ Ч ЬФПК РПЪЙГЙЙ ГЙЖТХ, ФП ЧУФБЧМСЕФУС ПОБ, Ч РТПФЙЧОПН УМХЮБЕ ОЙЮЕЗП ОЕ ЧУФБЧМСЕФУС.
. рПМЕ ДМС ДЕУСФЙЮОПК ФПЮЛЙ. уАДБ ЧУФБЧМСЕФУС УЙНЧПМ, ПРТЕДЕМЕООЩК ЛПОУФБОФПК DecimalSeparator.
, рПМЕ ДМС ТБЪДЕМЙФЕМС ФЩУСЮ. пОП ПЪОБЮБЕФ, ЮФП ЗТХРРЩ РП ФТЙ ГЙЖТЩ, УЮЙФБС ЧМЕЧП ПФ ДЕУСФЙЮОПК ФПЮЛЙ, ВХДХФ ТБЪДЕМСФШУС УРЕГЙБМШОЩН УЙНЧПМПН (ПО ЪБДБО ЛПОУФБОФПК ThousandSeparator). нЕУФПРПМПЦЕОЙЕ РПМС НПЦЕФ ВЩФШ РТПЙЪЧПМШОЩН.
е+, е-, Е+, Е- рТЙЪОБЛЙ РТЕДУФБЧМЕОЙС ЮЙУМБ Ч ОБХЮОПН ЖПТНБФЕ. рПСЧМЕОЙЕ МАВПЗП ЙЪ ЬФЙИ БТЗХНЕОФПЧ ПЪОБЮБЕФ, ЮФП ЮЙУМП ВХДЕФ РТЕПВТБЪПЧБОП У ИБТБЛФЕТЙУФЙЛПК Й НБОФЙУУПК. чУФБЧЛБ ОХМЕК РПУМЕ ФБЛПЗП БТЗХНЕОФБ РПЪЧПМСЕФ ПРТЕДЕМЙФШ ЫЙТЙОХ НБОФЙУУЩ. тБЪОЙГБ НЕЦДХ е+, Е+ Й е-, Е-Ч ФПН, ЮФП Ч РЕТЧЩИ ДЧХИ УМХЮБСИ УФБЧЙФУС «+» РТЙ ЧЩЧПДЕ РПМПЦЙФЕМШОЩИ ЮЙУЕМ.
‘XX’ «XX» уЙНЧПМЩ, ЪБЛМАЮЕООЩЕ Ч ПВЩЮОЩЕ ЙМЙ ДЧПКОЩЕ ЛБЧЩЮЛЙ, ОБРТСНХА ЧЛМАЮБАФУС Ч ЧЩИПДОХА УФТПЛХ.
> тБЪДЕМСЕФ УРЕГЙЖЙЛБФПТЩ ЖПТНБФБ ДМС РПМПЦЙФЕМШОЩИ, ПФТЙГБФЕМШОЩИ Й ОХМЕЧЩИ ЮЙУЕМ.

1 . юЙУМП ЧУЕЗДБ ПЛТХЗМСЕФУС ДП ФПК ФПЮОПУФЙ, ЛПФПТХА РПЪЧПМСЕФ ЪБДБООПЕ РТПЗТБННЙУФПН ЛПМЙЮЕУФЧП РПМЕК ДМС ТБЪНЕЭЕОЙС ГЙЖТ (‘0’ Й ‘#’).

2 . еУМЙ Х РТЕПВТБЪХЕНПЗП ЮЙУМБ УМЕЧБ ПФ ДЕУСФЙЮОПК ФПЮЛЙ РПМХЮБЕФУС ВПМШЫЕ ЪОБЮБЭЙИ ГЙЖТ, ЮЕН ЪБДБОП РПМЕК ДФС ЙИ ТБЪНЕЭЕОЙС, ФП ГЙЖТЩ ЧУЕ ТБЧОП ДПВБЧМСАФУС Ч УФТПЛХ. еУМЙ РПМЕК ОЕДПУФБФПЮОП УРТБЧБ ПФ ФПЮЛЙ, РТПЙУИПДЙФ ПЛТХЗМЕОЙЕ.

Илон Маск рекомендует:  Что такое код swf_openfile

3 . уЙНЧПМ ‘;’ РПЪЧПМСЕФ ЪБДБФШ ФТЙ ТБЪОЩИ ЖПТНБФБ ЧЩЧПДБ ДМС ЮЙУЕМ У ТБЪОЩН ЪОБЛПН. рТЙ ТБЪМЙЮОПН ЛПМЙЮЕУФЧЕ ЖПТНБФПЧ ПОЙ РТЙНЕОСАФУС УМЕДХАЭЙН ПВТБЪПН:

ПДЙО: РТЙНЕОСЕФУС ДМС ЧУЕИ ЮЙУЕМ; ДЧБ: РЕТЧЩК РТЙНЕОСЕФУС ДМС ЮЙУЕМ, ВПМШЫЙИ ЙМЙ ТБЧОЩИ ОХМА, ЧФПТПК ? ДМС ПФТЙГБФЕМШОЩИ; ФТЙ: РЕТЧЩК РТЙНЕОСЕФУС ДМС РПМПЦЙФЕМШОЩИ, ЧФПТПК ? ДМС ПФТЙГБФЕМШОЩИ ЮЙУЕМ, ФТЕФЙК ? ДМС ОХМС.

еУМЙ ЖПТНБФЩ ДМС ПФТЙГБФЕМШОЩИ ЮЙУЕМ ЙМЙ ОХМС РХУФЩ, РТЙНЕОСЕФУС ЖПТНБФ ДМС РПМПЦЙФЕМШОЩИ ЮЙУЕМ.

еУМЙ РХУФ ЖПТНБФ ДМС РПМПЦЙФЕМШОЩИ ЮЙУЕМ ЙМЙ УРЕГЙЖЙЛБФПТ ЖПТНБФБ ЧППВЭЕ ОЕ ЪБДБО (РХУФБС УФТПЛБ), ФП ЮЙУМБ ЖПТНБФЙТХАФУС УПЗМБУОП ПВПВЭЕООПНХ ЖПТНБФХ (ЛБЛ Ч ЖХОЛГЙЙ FloatToStr). фБЛПЕ ЖПТНБФЙТПЧБОЙЕ РТЙНЕОСЕФУС ФБЛЦЕ Ч УМХЮБЕ, ЕУМЙ ЮЙУМП ЪОБЮБЭЙИ ГЙЖТ УМЕЧБ ПФ ДЕУСФЙЮОПК ФПЮЛЙ РТЕЧЩУЙМП 18 Й ОЕ ЪБДБО ОБХЮОЩК ЖПТНБФ.

рТЙНЕОЕОЙЕ УРЕГЙЖЙЛБФПТБ ЙММАУФТЙТХЕФУС Ч ФБВМЙГЕ ОБ РТЙНЕТЕ РТЕПВТБЪПЧБОЙС ЮЕФЩТЕИ ЮЙУЕМ:

FormatFloat in Delphi

Premium Content
Premium Content
  • Facebook
  • Twitter
  • LinkedIn
  • https://www.experts-exchange.com/questions/27025267/FormatFloat-in-Delphi.html copy

it’s all in Delphi Help :

function FormatFloat(const Format: string; Value: Extended): string;

ex: Str:=FormatFloat(‘0.00’, 31.678); => ‘31.67’

Please advise if there is a specific need or thing you don’t understand in the format string

How to use FormatFloat in Delphi
ok
in memo;

Edit2.Text :=FormatFloat(‘#,##0.00’,d ebet);
Edit3.Text :=FormatFloat(‘#,##0.00’,k redit);
memo1.Lines.Add(‘d.. ‘+Edit2.Text);
memo1.Lines.Add(‘k.. ‘+Edit3.Text);

How to get Algin := Right ;

Become a Certified Penetration Testing Engineer

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

I want memo1.Lines.Add(‘d.. ‘+Edit2.Text);

to by RightJustify

s :=FormatFloat(‘#,##0.00’,d ebet);
s1 :=FormatFloat(‘#,##0.00’,d ebet);

memo1.Lines.Add(‘d.. ‘+s);
memo1.Lines.Add(‘d.. ‘+s1);

s and s1 to by = RightJustify

ok, then use Format function instead

%10.2f has the following signification :
‘f’ : format the parameter as fixed decimal value
10 (first value between % and f) : the whole parameter will take AT LEAST 10 characters, filled with spaces if need be, and right aligned by default (left aligned if preceded with ‘-‘)
2 (second value, after a ‘.’) : precision, or nb of digits after the decimal

only inconvenience of Format function used that way : no option to display thousand separators.

How to display thousand separators anyway : use of BOTH Format and FormatFloat this way :
s :=FormatFloat(‘#,##0.00’,d ebet);
memo1.Lines.Add(Format(‘d. . %10s’,[s]));

now, the format string use %s parameter, which stands for STRING, the 10 value between % and ‘s’ saying as above to RIGHT-ALIGN, padding with spaces, for a result of at least 10 characters

if you want thousandseparators . use n instead of f with Format

on top of that . if you want to use a variable for the width alignment :
assuming 80 characters wide:

this is a sample using locale formatsettings of the user and altering a few
and then passing those new settings on to format

Did we gave you enough info about how to use Format functions ? There is plenty more information in Delphi Help.

LocaleFormatSettings can give you also a lot of options to control how your application can format values (floats, dates, time etc..) but I recommend not playing too much with those, except if you really need setting specific display standards in your entire application. Playing too much with those global settings could well have an undesired effect on other components, some of which you maybe don’t have the code.

PS : Thanks Geert for the %n tip, I have always overlooked that one. I don’t use much thousand separators, but who knows, maybe one day I will need it !

Программно не получается в типе real получить ноль

так вот текущее значение TEXT = 40, а tx=-0,025
т.е. после выполнения первой строки значение tx должно быть равно нулю и затем это нулевое значение должно передаться в edit8. Но вместо нуля переменная tx приобретает значение 7,48776041170629E-14.
Такая же фигня и с другой переменной — вместо нуля все время присваивается 3,82333054105288E-15.
Откуда это может браться?

И так попутно вопросик — эффективное средство для преобразования чисел вида 4,0101010101010101 в
числа вида, например 4,0101 (с ограниченным колвом знаков)? (а то в справке че-то как-то неудобно сделано!) И можно ли при описании переменной как-нибудь задать ее форма, чтобы использовалось, например, только 3-5 знаков после запятой?

Помогите, плиз, начинающему!

22.04.2010, 18:40

Количество значащих символов в типе Real.
Столкнулся вот с такой интересной проблемой. Вот задача — «Имеются два миллионера: у одного вес.

Проблема с Div и Mod в типе Real
Подскажите как заменить div/mod, что поставить вместо них, или в чем ошибка программы? // Дано.

Ошибка: Нельзя преобразовать тип function x real real к real
Здравствуйте, не могу понять как исправить ошибку (строка 32) var a,b,e,h,xi,fi,ln1,ln2:real;.

Задачка на пошевелить чуть-чуть мозгами (Нужно получить ноль, если в регистре ноль, и единицу в обратном случае)
В процессе написания кода столкнулся с одной задачей, которая показалась мне интересной и я хотел.

Нельзя преобразовать тип function(x: real): real к real
Ничего не понимаю, почему нельзя? Помогите пожалуйста найти ошибку в коде. uses CRT; type .

22.04.2010, 19:00 2

Добавлено через 7 минут
второе
Тип TFloatFormat используется следующими SysUtils функциями:

CurrToStrF — для отображения значений валют
FloatToStrF — для отображения чисел с плавающей запятой
FloatToText — для форматирования к массиву

Возможные значения TFloatFormat:

Определяет универсальное числовое форматирование, которое стремится сохранить результирующее значение как можно компактнее. Он удаляет конечные нули и десятичную точку, где возможно. Никакие разделители тысяч не показываются. Формат экспоненты используется, если мантисса является слишком большой для указанного значения Precision команды форматирования. В этом случае, значение Digits (0.. 4) определяет минимальное число показываемых цифр экспоненты. Символ десятичной точки определен переменной DecimalSeparator. ffExponent

Обычно называемый как Научный или Инженерный формат, экспонента отображается символом E следующая за числом. Запись E+15 означает 1015. Экспонента всегда имеет знак + или -. Этой экспоненте предшествует число, которое всегда имеет одну цифру перед десятичной точкой.

Например: 123.456 форматируется как 1.23456E+2; 0.00123 форматируется как 1.23E-3.

Используемый функцией параметр Precision дает число отображаемый цифр перед E, а параметр Digits дает число цифр (0..4) после E.

Символ десятичной точки определен переменной DecimalSeparator.

Этот формат также не использует никаких разделителей тысяч. Он отображает Precision цифр перед десятичной точкой, и Digits цифр после. Если слишком много цифр перед десятичной точкой, то вместо этого используется формат экспоненты.

Символ десятичной точки определен переменной DecimalSeparator.

То же самое, что и ffFixed, за исключением того, что используется разделитель тысяч. Они определены переменной ThousandSeparator.

То же самое, что и ffNumber, но с добавлением символа (строки) денежной единицы, который определен переменной CurrencyString. Дополнительно, на форматирование влияют переменные

CurrencyFormat и NegCurrFormat.

General 4,0 = 1235
General 6,0 = 1234.56
General 6,2 = 1234.56
General 3,2 = 1.23E03

Exponent 4,0 = 1.235E+3
Exponent 6,0 = 1.23456E+3
Exponent 6,2 = 1.23456E+03
Exponent 3,2 = 1.23E+03

Fixed 4,0 = 1235
Fixed 6,0 = 1235
Fixed 6,2 = 1234.56
Fixed 3,2 = 1.23E03

Number 4,0 = 1,235
Number 6,0 = 1,235
Number 6,2 = 1,234.56
Number 3,2 = 1.23E03

Currency 4,0 = ?1,235
Currency 6,0 = ?1,235
Currency 6,2 = ?1,234.56
Currency 3,2 = 1.23E03

Справочник по компонентам Delphi. Часть 1

Written on 15 Сентября 2006 . Posted in Delphi

ОГЛАВЛЕНИЕ

Функции преобразования чисел с плавающей точкой

Преобразование числа с плавающей точкой (далее в этом разделе просто числа) в текстовую строку и обратно всегда было достаточно сложной задачей. Для ее решения в Delphi есть функции сразу трех уровней сложности.

Первый — самый простой — представлен функцией FloatToStr:

Число, заданное параметром Value, преобразуется в возвращаемую функцией строку. Формат преобразования соответствует типу преобразования g функции Format, причем длина выходной строки принимается равной 15 символам.

Больше возможностей для управления форматом вывода дает функция:

Здесь Value — преобразуемое значение, Format — один из предопре­деленных форматов. Хотя этот параметр имеет тип TFloatFormat, он имеет очень много общего с типами преобразований в функции Format (ссылки на них есть в предлагаемой таблице). Параметр Precision задает общее число символов в выходной строке и не должен превышать 7 для фактичес­кого параметра типа Single, 15 — для Double и 18 — для Extended. Digits — это параметр, интерпретируемый в зависимости от значения параметра Format:

Илон Маск рекомендует:  Оценка xhtml
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:

Она преобразует число в строку в соответствии со спецификатором формата, содержащимся в параметре Format. Правила его задания следующие:

Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае вставляется 0.
# Поле для цифры. Если форматируемая величина имеет в этой позиции цифру, то вставляется она, в противном случае ничего не вставляется.
Поле для десятичной точки. Сюда вставляется символ, определенный константой DecimalSeparator.
; Поле для разделителя тысяч. Оно означает, что группы по три цифры, считая влево от десятичной точки, будут разделяться специальным символом (он задан константой ThousandSeparator). Местоположение поля может быть произвольным.
Е+, Е-, е+, е- Признаки представления числа в научном формате. Появление любого из этих аргументов означает, что число будет преобразовано с харак­теристикой и мантиссой. Вставка нулей после такого аргумента позволяет определить ширину мантиссы. Разница между Е+, е+ и Е-, е-в том, что в первых двух случаях ставится «+» при выводе положи­тельных чисел.
‘хх’ «хх» Символы, заключенные в обычные или двойные кавычки, напрямую включаются в выходную строку.
; Разделяет спецификаторы формата для положительных, отрицательных и нулевых чисел.

Примечания:

1. Число всегда округляется до той точности, которую позволяет заданное программистом количество полей для размещения цифр (‘0’ и ‘#’).

2. Если у преобразуемого числа слева от десятичной точки получается больше значащих цифр, чем задано полей для их размещения, то цифры все равно добавляются в строку. Если полей недостаточно справа от точки, происходит округление.

3. Символ ‘;’ позволяет задать три разных формата вывода для чисел с разным знаком. При различном количестве форматов они применяются следующим образом:

  • один: применяется для всех чисел;
  • два: первый применяется для чисел, больших или равных нулю, второй — для отрицательных;
  • три: первьш применяется для положительных, второй — для отрицательных чисел, третий — для нуля.

Если форматы для отрицательных чисел или нуля пусты, применяется формат для положительных чисел.

Если пуст формат для положительных чисел или спецификатор формата вообще не задан (пустая строка), то числа форматируются согласно обобщенному формату (как в функции FloatToStr). Такое форматирование применяется также в случае, если число значащих цифр слева от десятичной точки превысило 18 и не задан научный формат.

Применение спецификатора иллюстрируется в таблице на примере преобразо­вания четырех чисел:

Спецификатор 1234 -1234 0.5
1234 -1234 1
0.00 1234.00 -1234.00 0.50 0.00
#.## 1234 -1234 .5
#.##0.00 1,234.00 -1,234.00 0.50 0.00
#,##0.00;(#,##0.00) 1,234.00 (1,234.00) 0.50 0.00
#,##0.00;;Zero 1,234.00 -1,234.00 0.50 Zero
О.ОООЕ+00 1.234Е+03 -1.234Е+03 5.000Е-01 О.ОООЕ+00
#.###Е-0 1.234ЕЗ -1.234ЕЗ 5Е-1 ОЕО

Две следующие функции применяют те же правила, что и рассмотренные выше функции, но отличаются параметрами:

function FloatToText(Buffer: PChar; Value: Extended; Format: TFloatFormat; Precision, Digits: Integer) : Integer; Соответствует 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:

Общие правила для передаваемой в функцию строки таковы:

  • допускаются как научный, так и фиксированный форматы;
  • в качестве десятичной точки должен выступать символ, который содержится в DecimalSeparator;
  • не допускаются символы-разделители тысяч (ThousandSeparator), а также символы обозначения денежньк единиц.

В случае ошибки преобразования функция StrToFloat генерирует исключитель­ную ситуацию EConvertError, a TextToFloat — возвращает значение False.

5 мелочей из-за которых я использую Delphi 2010

Вообще вплоть до середины 2009 года я использовал для работы старую добрую Delphi 7. Были, конечно, попытки «спрыгнуть» на Delphi 8, RAD Studio 2005, но попытки эти были безуспешны. Среди прочих недостатков восьмой версии и RAD Studio 2005 очень сильно напрягала утечка памяти. Буквально через час-полтора программирования в этих системах компьютер в лучшем случае вставал колом и переставал реагировать на команды. Так я и программировал на Delphi 7 и всё меня устраивало — компонентов море, память не жрёт, работает шустро. А потом появилась Delphi 2009 от Code Gear. Решил попробовать снова слезть с насиженного места и двигаться так сказать «в ногу с прогрессом».

Установил на машину Code Gear RAD Studio 2009 и был приятно удивлен, что глюков с памятью нет. Система работала шустро и ни коим образом не вешала систему. Постепенно привык и к новому интерфейсу. А спустя полгода на рынок вышла Delphi 2010 в составе Embarcadero RAD Studio 2010. Естественно, что большинство мелочей о которых я сейчас расскажу, присутствовали, наверное, во всех предшественниках Delphi 2010, но все-таки стоит о них упомянуть ещё раз. Итак, поехали.

1. Фолдинг (Fold)

Очень удобная фича при работе с большими объемами кода. Позволяет сворачивать куски кода, которые в данный момент не требуются. Например, можно свернуть описания типов данных или отдельную функцию.

На рисунке показан модуль в котором «свернут» TForm2. А если учесть, что при разработке программ обычно используется большое количество визуальных и невизуальных компонентов, то фолдинг помогает очень сильно экономить место. Единственное, что немного портит впечатление от фолдинга Delphi 2010, заключается в том, что нет возможности свернуть/развернуть отдельно взятые операторные скобки begin..end. Иногда, при разборе больших процедур и функций было бы удобно свернуть часть метода.

Также, при работе с большими модулями, можно автоматически сворачивать/разворачивать все однотипные элементы модуля. Для этого необходимо вызвать контекстное меню кликов правой кнопкой мыши в окне модуля и выбрать соответствующую опцию фолдинга (вкладки Fold и UnFold в меню).

2. Быстрое комментирование

Мелочь, а приятно, когда не надо переходить на каждую строчку и выставлять // для комментирования строки. Когда необходимо было закомментировать 5 строк, ещё терпимо. А когда 105? Теперь всё намного проще — выделяем кусок кода, который надо закомментировать, жмем горячие клавиши Ctrl+/ и Delphi 2010 заключает в // весь выделенный фрагмент. Просто и удобно. Дополнительно в контекстном меню предусмотрена опция Surround, с помощью которой можно заключать выделенный фрагмент кода в операторные скобки, комментировать и т.д. При этом, если вы заключаете выделенный фрагмент, например, в операторные скобки begin..end или try..finally..end, то Delphi 2010 самостоятельно форматирует код, избавляя Вас от необходимости жать лишний раз пробелы. Кстати, автоформатирование — ещё одна мелочь, которая мне очень понравилась.

3. Автоматическое форматирование исходного кода.

В Delphi 2010 появилась новая возможность автоматического форматирования исходного кода. Вспомнил сейчас одного знакомого — он писал программы абсолютно не пользуясь пробелами. Причём не из лени или желания запарить тех, кто будет смотреть его исходники — просто ему так было удобно. Не знаю в чем заключалось это «удобство», но просматривать его исходники и искать ошибки — это было настоящее мучение.

Теперь же, для того, чтобы отформатировать код, достаточно нажать горячие клавиши Ctrl+D и Delphi 2010 отформатирует код согласно Вашим предпочтениям. Кстати опции форматирования можно настроить о опциях. Для этого необходимо выбрать «Tools — Options — Formatter». Здесь Вы найдете массу всевозможных настроек форматирования для Delphi и C++. Признаться, сам ещё до конца не разобрался со всеми настройками, но установок по умолчанию вполне хватает для нормальной работы.

Илон Маск рекомендует:  Изменение внешнего вида счетчика в cnstats

4. Группирование проектов.

На сколько я помню, эта возможность была предусмотрена ещё в RAD Studio 2005, но в связи с глючностью студии я так с этой возможностью до конца и не разобрался. А вот в Delphi 2010 сейчас использую её где только возможно. Для чего можно применить эту возможность? Представьте, например, что вы разрабатываете новый компонент Delphi. Какие бы Вы действия выполняли для отладки своего творения в Delphi 7? Ну, как минимум, запустили бы второй экземпляр Delphi для удобства, устанавливали бы свой компонент там, а в первом экземпляре перекомпилировали бы проект.

С помощью группировки проектов, отладка становится намного проще. Создаем проект нового компонента, в окне Project Manager вызываем контекстное меню и добавляем в группу новый или уже существующий проект в котором будем отлаживать компонент и теперь без лишних хлопот работаем сразу с двумя проектами — один основной, второй — для отладки.

А чтобы работать было ещё удобней, выделяем проект для тестирования, вызываем контекстное меню и в нем жмем «Dependencies…», в открывшемся окне ставим галочку напротив проекта компонента. Теперь, прежде чем пройдет компиляция тестового проекта, сначала соберется компонент.

Попробовав один раз подобную схему разработки — использую её теперь всегда. Особенно удобно, когда необходимо работать сразу с 3-4 проектами одновременно.

5. Удобство отладчика.

В RAD Studio 2010 значительно улучшились опции отладки приложений. Я сейчас не буду рассказывать обо всех улучшениях, а покажу только те, которые сразу бросились в глаза при первой знакомстве со студией.

Как видно из рисунка, теперь при отладке программы можно видеть «человеческие» значения даты и времени. Не менее удобным стал и просмотр значений, например в переменных типа TStringList — теперь при отладке можно в отдельном окне просматривать все элементы списка.

Это далеко не все приятные мелочи, которые сподвигли меня на 100% переход в RAD Studio 2010. О всем не упомнишь, всего не расскажешь, но эти — те которые с первого взгляда бросились в глаза.

В целом же можно отметить, что по сравнению с Delphi 7, новая версия Delphi значительно улучшилась и не только в плане интерфейса. Помниться на одном из форумов по Delphi читал фразы типа «Delphi умирает», «Развитие Delphi остановилось на Delphi 7» и прочие «патриотические» мысли. Лично я с ними категорически не согласен. Развитие Delphi действительно останавливалось и предыдущие версии 8 и 2005 больше походили на спасение утопающего нежели на развитие, но теперь достаточно заглянуть в справку по RAD Studio 2010 и почитать про нововведения в конструкциях языка, новые типы и пр. После этого, думаю редко кто не согласиться с тем, что новые хозяева Delphi действительно развивают систему, а не стараются «срубить бабла по-легкому». И никогда Delphi не умрет. Догонять «любимцев» Micrisift будет, а умирать — нет :).

Delphi FormatFloat

Не могу разобраться с функцией FormanFloat вот кусочек кода

procedure TMainForm.OKClick(Sender: TObject);
var
x,y,z:Real;
begin
x:=StrToFloat(Edit1.Tex);
y:=StrToFloat(edit2.Tex);
z:=x/y;
Edit3.Tex:=FloatToStr(z); / Как пременить FormatFloat(‘ #.##’) к Edit3.Tex

// Display a sample value using all of the format options

// Round out the decimal value
ShowMessage(‘##### : ‘+FormatFloat(‘#####’, float));
ShowMessage(‘00000 : ‘+FormatFloat(‘00000’, float));
ShowMessage(‘0 : ‘+FormatFloat(‘0’ , float));
ShowMessage(‘#,##0 : ‘+FormatFloat(‘#,##0’, float));
ShowMessage(‘,0 : ‘+FormatFloat(‘,0’ , float));
ShowMessage(»);

// Include the decimal value
ShowMessage(‘0.#### : ‘+FormatFloat(‘0.####’, float));
ShowMessage(‘0.0000 : ‘+FormatFloat(‘0.0000’, float));
ShowMessage(»);

// Scientific format
ShowMessage(‘0.0000000E+00 : ‘+FormatFloat(‘0.0000000E+00’, float));
ShowMessage(‘0.0000000E-00 : ‘+FormatFloat(‘0.0000000E-00’, float));
ShowMessage(‘#.#######E-## : ‘+FormatFloat(‘#.#######E-##’, float));
ShowMessage(»);

// Include freeform text
ShowMessage(‘»Value = «0.0 : ‘+FormatFloat(‘»Value = «0.0’, float));
ShowMessage(»);

// Different formatting for negative numbers
ShowMessage(‘0.0 : ‘+FormatFloat(‘0.0’ , -1234.567));
ShowMessage(‘0.0 «CR»;0.0 «DB» : ‘+
FormatFloat(‘0.0 «CR»;0.0 «DB»‘, -1234.567));
ShowMessage(‘0.0 «CR»;0.0 «DB» : ‘+
FormatFloat(‘0.0 «CR»;0.0 «DB»‘, 1234.567));
ShowMessage(»);

Функции Delphi FormatFloat и Format

У меня есть приложение, в котором пользователи могут установить, как отображаются значения. Пользователи вводят строку форматирования, и компонент использует FormatFloat для отображения значения.

Но теперь мы используем новый сторонний компонент, который форматирует значения с использованием функции Format, и, конечно, ни один из наших пользовательских форматов не работает, поскольку функции Format и FormatFloat используют другой синтаксис.

Знает ли кто-нибудь о способе преобразования между этими двумя? Или, может быть, у кого-то есть код для этого?

Хотя строки формата для FormatFloat могут быть более или менее преобразованы в формат Format, вы можете получить реальное сходство для положительных значений. Метод Format просто не обеспечивает достаточной гибкости для использования функций и мелкозернистого управления, которые предлагают строки формата для метода FormatFloat.

Например, метод FormatFloat позволяет использовать три разных формата для положительных, отрицательных и нулевых значений. Кроме того, строки формата FormatFloat допускают строковые литералы, например. ‘#, ## 0,00;; Нулевой’; (это означает, что нулевые значения печатаются как «Zero» ).

Чтобы получить что-то подобное с помощью функции Format, вам самому нужно будет выполнить всю работу grunt, которую FormatFloat делает для вас через строку формата.

Итак, хотя я не против изменения сторонних источников управления, поскольку я против изменения источников vcl, я с Дэвидом на этом: найдите способ заставить сторонний элемент управления использовать функцию FormatFloat. Предпочтительно через пользовательский потомок или через класс интерполятора (также известный как класс перехватчика), но если это не удается, во что бы то ни стало, измените источник управления третьей стороной. Просто убедитесь, что вы правильно пометили измененные разделы, чтобы вы могли легко переделать его при переключении на новую версию этого элемента управления.

TFloatFormat — Тип Delphi

уЕТЧЕТ РПДДЕТЦЙЧБЕФУС
ЛБЖЕДТПК ЙОЖПТНБФЙЛЙ Й ЧЩЮЙУМЙФЕМШОПК ФЕИОЙЛЙ зТзх
ФЕМ. +375-(0)152-445-101
E-mail : kadan@grsu.grodno.by

рТЕПВТБЪПЧБОЙЕ ЮЙУЕМ У РМБЧБАЭЕК ФПЮЛПК. жХОЛГЙС FormatFloat

оБЛПОЕГ, ЧПЪНПЦОПУФШ РПМОПЗП ХРТБЧМЕОЙС ЖПТНБФПН РТЕДПУФБЧМСЕФ ЖХОЛГЙС FormatFloat:

function FormatFloat(const Format: string;
Value: Extended): string;

пОБ РТЕПВТБЪХЕФ ЮЙУМП Ч УФТПЛХ Ч УППФЧЕФУФЧЙЙ УП УРЕГЙЖЙЛБФПТПН ЖПТНБФБ, УПДЕТЦБЭЙНУС Ч РБТБНЕФТЕ Format. рТБЧЙМБ ЕЗП ЪБДБОЙС УМЕДХАЭЙЕ:

рПМЕ ДМС ГЙЖТЩ. еУМЙ ЖПТНБФЙТХЕНБС ЧЕМЙЮЙОБ ЙНЕЕФ Ч ЬФПК РПЪЙГЙЙ ГЙЖТХ, ФП ЧУФБЧМСЕФУС ПОБ, Ч РТПФЙЧОПН УМХЮБЕ ЧУФБЧМСЕФУС 0.
# рПМЕ ДМС ГЙЖТЩ. еУМЙ ЖПТНБФЙТХЕНБС ЧЕМЙЮЙОБ ЙНЕЕФ Ч ЬФПК РПЪЙГЙЙ ГЙЖТХ, ФП ЧУФБЧМСЕФУС ПОБ, Ч РТПФЙЧОПН УМХЮБЕ ОЙЮЕЗП ОЕ ЧУФБЧМСЕФУС.
. рПМЕ ДМС ДЕУСФЙЮОПК ФПЮЛЙ. уАДБ ЧУФБЧМСЕФУС УЙНЧПМ, ПРТЕДЕМЕООЩК ЛПОУФБОФПК DecimalSeparator.
, рПМЕ ДМС ТБЪДЕМЙФЕМС ФЩУСЮ. пОП ПЪОБЮБЕФ, ЮФП ЗТХРРЩ РП ФТЙ ГЙЖТЩ, УЮЙФБС ЧМЕЧП ПФ ДЕУСФЙЮОПК ФПЮЛЙ, ВХДХФ ТБЪДЕМСФШУС УРЕГЙБМШОЩН УЙНЧПМПН (ПО ЪБДБО ЛПОУФБОФПК ThousandSeparator). нЕУФПРПМПЦЕОЙЕ РПМС НПЦЕФ ВЩФШ РТПЙЪЧПМШОЩН.
е+, е-, Е+, Е- рТЙЪОБЛЙ РТЕДУФБЧМЕОЙС ЮЙУМБ Ч ОБХЮОПН ЖПТНБФЕ. рПСЧМЕОЙЕ МАВПЗП ЙЪ ЬФЙИ БТЗХНЕОФПЧ ПЪОБЮБЕФ, ЮФП ЮЙУМП ВХДЕФ РТЕПВТБЪПЧБОП У ИБТБЛФЕТЙУФЙЛПК Й НБОФЙУУПК. чУФБЧЛБ ОХМЕК РПУМЕ ФБЛПЗП БТЗХНЕОФБ РПЪЧПМСЕФ ПРТЕДЕМЙФШ ЫЙТЙОХ НБОФЙУУЩ. тБЪОЙГБ НЕЦДХ е+, Е+ Й е-, Е-Ч ФПН, ЮФП Ч РЕТЧЩИ ДЧХИ УМХЮБСИ УФБЧЙФУС «+» РТЙ ЧЩЧПДЕ РПМПЦЙФЕМШОЩИ ЮЙУЕМ.
‘XX’ «XX» уЙНЧПМЩ, ЪБЛМАЮЕООЩЕ Ч ПВЩЮОЩЕ ЙМЙ ДЧПКОЩЕ ЛБЧЩЮЛЙ, ОБРТСНХА ЧЛМАЮБАФУС Ч ЧЩИПДОХА УФТПЛХ.
> тБЪДЕМСЕФ УРЕГЙЖЙЛБФПТЩ ЖПТНБФБ ДМС РПМПЦЙФЕМШОЩИ, ПФТЙГБФЕМШОЩИ Й ОХМЕЧЩИ ЮЙУЕМ.

1 . юЙУМП ЧУЕЗДБ ПЛТХЗМСЕФУС ДП ФПК ФПЮОПУФЙ, ЛПФПТХА РПЪЧПМСЕФ ЪБДБООПЕ РТПЗТБННЙУФПН ЛПМЙЮЕУФЧП РПМЕК ДМС ТБЪНЕЭЕОЙС ГЙЖТ (‘0’ Й ‘#’).

2 . еУМЙ Х РТЕПВТБЪХЕНПЗП ЮЙУМБ УМЕЧБ ПФ ДЕУСФЙЮОПК ФПЮЛЙ РПМХЮБЕФУС ВПМШЫЕ ЪОБЮБЭЙИ ГЙЖТ, ЮЕН ЪБДБОП РПМЕК ДФС ЙИ ТБЪНЕЭЕОЙС, ФП ГЙЖТЩ ЧУЕ ТБЧОП ДПВБЧМСАФУС Ч УФТПЛХ. еУМЙ РПМЕК ОЕДПУФБФПЮОП УРТБЧБ ПФ ФПЮЛЙ, РТПЙУИПДЙФ ПЛТХЗМЕОЙЕ.

3 . уЙНЧПМ ‘;’ РПЪЧПМСЕФ ЪБДБФШ ФТЙ ТБЪОЩИ ЖПТНБФБ ЧЩЧПДБ ДМС ЮЙУЕМ У ТБЪОЩН ЪОБЛПН. рТЙ ТБЪМЙЮОПН ЛПМЙЮЕУФЧЕ ЖПТНБФПЧ ПОЙ РТЙНЕОСАФУС УМЕДХАЭЙН ПВТБЪПН:

ПДЙО: РТЙНЕОСЕФУС ДМС ЧУЕИ ЮЙУЕМ; ДЧБ: РЕТЧЩК РТЙНЕОСЕФУС ДМС ЮЙУЕМ, ВПМШЫЙИ ЙМЙ ТБЧОЩИ ОХМА, ЧФПТПК ? ДМС ПФТЙГБФЕМШОЩИ; ФТЙ: РЕТЧЩК РТЙНЕОСЕФУС ДМС РПМПЦЙФЕМШОЩИ, ЧФПТПК ? ДМС ПФТЙГБФЕМШОЩИ ЮЙУЕМ, ФТЕФЙК ? ДМС ОХМС.

еУМЙ ЖПТНБФЩ ДМС ПФТЙГБФЕМШОЩИ ЮЙУЕМ ЙМЙ ОХМС РХУФЩ, РТЙНЕОСЕФУС ЖПТНБФ ДМС РПМПЦЙФЕМШОЩИ ЮЙУЕМ.

еУМЙ РХУФ ЖПТНБФ ДМС РПМПЦЙФЕМШОЩИ ЮЙУЕМ ЙМЙ УРЕГЙЖЙЛБФПТ ЖПТНБФБ ЧППВЭЕ ОЕ ЪБДБО (РХУФБС УФТПЛБ), ФП ЮЙУМБ ЖПТНБФЙТХАФУС УПЗМБУОП ПВПВЭЕООПНХ ЖПТНБФХ (ЛБЛ Ч ЖХОЛГЙЙ FloatToStr). фБЛПЕ ЖПТНБФЙТПЧБОЙЕ РТЙНЕОСЕФУС ФБЛЦЕ Ч УМХЮБЕ, ЕУМЙ ЮЙУМП ЪОБЮБЭЙИ ГЙЖТ УМЕЧБ ПФ ДЕУСФЙЮОПК ФПЮЛЙ РТЕЧЩУЙМП 18 Й ОЕ ЪБДБО ОБХЮОЩК ЖПТНБФ.

рТЙНЕОЕОЙЕ УРЕГЙЖЙЛБФПТБ ЙММАУФТЙТХЕФУС Ч ФБВМЙГЕ ОБ РТЙНЕТЕ РТЕПВТБЪПЧБОЙС ЮЕФЩТЕИ ЮЙУЕМ:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL