FloatToStrF — Функция Delphi


FloatToStrF — Функция Delphi

The Value type may be any of the floating point types.

The Format parameter is defined by the TFloatFormat (SysUtils) type :

ffCurrency eg : ?2,345.60
ffExponent eg : 2.3456E+04
ffFixed eg : 2345.60
ffGeneral eg : 2345.6
ffNumber eg : 2,345.6

The other parameters are dependent on this format. See TFloatFormat for full details.

Version 2 of this function is for use within threads. You furnish the FormatSettings record before invoking the call. It takes a local copy of global formatting variables that make the routine thread safe. Notes You can change the currency string from the default (such as ‘$’ in the USA, ‘?’ in the UK) using the CurrencyString variable.

You can change the position of the currency string using the CurrencyFormat variable.

You can change the decimal point value by setting the DecimalSeparator character.

You can change the thousands separator value by setting the ThousandSeparator character.

If the full number of digits before the decimal point (the mantissa) cannot be displayed, then the display reverts to the exponent (scientific) format. Related commands

CurrencyDecimals Defines decimal digit count in the Format function
CurrencyFormat Defines currency string placement in curr display functions
CurrencyString The currency string used in currency display functions
DecimalSeparator The character used to display the decimal point
FloatToStr Convert a floating point value to a string
NegCurrFormat Defines negative amount formatting in currency displays
TFloatFormat Formats for use in floating point number display functions
ThousandSeparator The character used to display the thousands separator
Author links
Buy Website Traffic at
Buywebsitetrafficexperts.com

Buy Proxies at
Buyproxies.io Download this web site as a Windows program.

Example code : Display numbers as financial values
var
amount1 : Extended;
begin
amount1 := 1234.567;

// Display in a Currency format
CurrencyString := ‘? ‘;
ShowMessage(‘Using 8,4 = ‘+ floattostrf (amount1, ffCurrency, 8, 4));
ShowMessage(‘Using 4,4 = ‘+ floattostrf (amount1, ffCurrency, 4, 4));
ShowMessage(‘Using 4,2 = ‘+ floattostrf (amount1, ffCurrency, 4, 2));
ShowMessage(‘Using 2,4 = ‘+ floattostrf (amount1, ffCurrency, 2, 4));
end;

Show full unit code
Using 8,4 = ? 1,234.5670
Using 4,4 = ? 1,235.0000
Using 4,2 = ? 1,235.00
Using 2,4 = 1.2E0003
Example code : Display numbers with Scientific formatting
var
amount1 : Extended;
begin
amount1 := 1234.567;

// Display in a Scientific format
ShowMessage(‘Using 8,4 = ‘+ floattostrf (amount1, ffExponent, 8, 4));
ShowMessage(‘Using 4,4 = ‘+ floattostrf (amount1, ffExponent, 4, 4));
ShowMessage(‘Using 4,2 = ‘+ floattostrf (amount1, ffExponent, 4, 2));
ShowMessage(‘Using 2,4 = ‘+ floattostrf (amount1, ffExponent, 2, 4));
end;

Show full unit code
Using 8,4 = 1.2345670E+0003
Using 4,4 = 1.235E+0003
Using 4,2 = 1.235E+03
Using 2,4 = 1.2E+0003
Example code : General display of numbers
var
amount1 : Extended;
begin
amount1 := 1234.567;

// Display in Fixed format
ShowMessage(‘Fixed formatting :’);
ShowMessage(»);
ShowMessage(‘Using 8,4 = ‘+ floattostrf (amount1, ffFixed, 8, 4));
ShowMessage(‘Using 4,4 = ‘+ floattostrf (amount1, ffFixed, 4, 4));
ShowMessage(‘Using 4,2 = ‘+ floattostrf (amount1, ffFixed, 4, 2));
ShowMessage(‘Using 2,4 = ‘+ floattostrf (amount1, ffFixed, 2, 4));

// Display in General format
ShowMessage(»);
ShowMessage(‘General formatting :’);
ShowMessage(»);
ShowMessage(‘Using 8,4 = ‘+ floattostrf (amount1, ffGeneral, 8, 4));
ShowMessage(‘Using 4,4 = ‘+ floattostrf (amount1, ffgeneral, 4, 4));
ShowMessage(‘Using 4,2 = ‘+ floattostrf (amount1, ffGeneral, 4, 2));
ShowMessage(‘Using 2,4 = ‘+ floattostrf (amount1, ffGeneral, 2, 4));

// Display in Number format
ShowMessage(»);
ShowMessage(‘Number formatting :’);
ShowMessage(»);
ShowMessage(‘Using 8,4 = ‘+ floattostrf (amount1, ffNumber, 8, 4));
ShowMessage(‘Using 4,4 = ‘+ floattostrf (amount1, ffNumber, 4, 4));
ShowMessage(‘Using 4,2 = ‘+ floattostrf (amount1, ffNumber, 4, 2));
ShowMessage(‘Using 2,4 = ‘+ floattostrf (amount1, ffNumber, 2, 4));
end;

Show full unit code
Fixed formatting :

Using 8,4 = 1234.5670
Using 4,4 = 1235.0000
Using 4,2 = 1235.00
Using 2,4 = 1.2E0003

Using 8,4 = 1234.567
Using 4,4 = 1235
Using 4,2 = 1235
Using 2,4 = 1.2E0003

Using 8,4 = 1,234.5670
Using 4,4 = 1,235.0000
Using 4,2 = 1,235.00
Using 2,4 = 1.2E0003

Функции форматирования

Function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): String;

Преобразовывает число с плавающей запятой, в строковое представление.

Параметр Format определяет формат результирующей строки.

Параметр Precision определяет точность данного значения. Он должен быть равен 7 или меньше для значений типа Single, 15 или меньше для значений типа Double и 18 или меньше для значений типа Extended.

Значение параметра Digit зависит от выбранного формата.

Возможные значения параметра Format описаны ниже.

  • ffGeneral — общий формат числа. Значение преобразовывается в самую короткую возможную десятичную строку, использующую фиксированный или научный формат. Конечные нули удаляются, а десятичная точка появляется только в случае необходимости. Параметр Digit определяет минимальное число цифр в порядке числа (между 0 и 4).
  • ffExponent — научный формат. Значение преобразовывается в строку вида «-d. ddd . E + dddd». Общее количество цифр в результирующей строке (включая одну перед десятичной точкой) определяется параметром Precision. Параметр Digit определяет минимальное число цифр в порядке числа (между 0 и 4).
  • ffFixed — фиксированный формат. Значение преобразовывается в строку вида «-ddd. ddd . «. Число цифр после десятичной точки определяется параметром Digit и должно быть не больше 18. Если число цифр слева от десятичной точки больше, чем определено в параметре Precision, используется научный формат.
  • ffNumber — числовой формат. Значение преобразовывается в строку вида «-d, ddd, ddd.ddd . «. Формат ffNumber соответствует формату ffFixed, за исключением того, что возникающая в результате строка содержит разделитель тысяч.
  • ffCurrency — денежный формат. Значение преобразовывается в строку, которая представляет собой денежную величину. Преобразование управляется глобальными переменными CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator и DecimalSeparator, которые определяются соответствующими значениями раздела «Язык и стандарты» Панели управления Windows. Число цифр после десятичной точки определяется параметром Digits и должно быть не больше 18.

Если параметр Value принимает бесконечное значение (с плюсом или минусом), функция возвращает соответственно «INF» или «-INF».

Function StrToFloat(const S: String): Extended;

Преобразовывает данную строку в число с плавающей запятой. Строка должна состоять из необязательного знака (+ или -), последовательности цифр с необязательной десятичной точкой и необязательным «E» или «e», сопровождаемым целым числом со знаком.

Глобальная переменная DecimalSeparator определяет символ, который будет использоваться как десятичная точка. Разделитель тысяч и обозначения денежной единицы не допускаются. Если строка имеет неверный формат, возбуждается исключительная ситуация EConvertError.

Function IntToStr(Value: Integer): String;

Преобразовывает целое число в строку.

Function StrToInt(const S: String): Integer;

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

Delphi FloatToStr — Почему дисплей отличается?

Использование функции ПО УМОЛЧАНИЮ FloatToStr

падение нуля после десятичной точки

Может кто-нибудь объяснить, почему значение во втором случае не выводится на

Документация для FloatToStr содержит ответ:

Преобразование использует формат общего номера с 15 значащими цифрами.

Чтобы интерпретировать этот оператор, вам также нужно обратиться к теме, описывающей функцию Format , и, в частности, текст, касающийся формата общего номера (выделение мое):

Значение преобразуется в кратчайшую возможную десятичную строку с использованием фиксированного или научного формата. Число значащих цифр в полученной строке задается спецификатором точности в строке формата; стандартная точность 15 предполагается, если нет спецификатора точности. Исходящие нули удаляются из результирующей строки, и десятичная точка появляется только при необходимости. Полученная строка использует формат с фиксированной запятой, если количество цифр слева от десятичной точки в значении меньше или равно указанной точности, а , если значение больше или равно 0,00001 . В противном случае результирующая строка использует научный формат.

К сожалению, документация на самом деле ошибочна. Вместо 0.00001 он должен читать 0.0001 . Это иллюстрируется этой программой:

Для ваших примеров 0.0000442615029219009 меньше 0.0001 и поэтому форматируется с использованием научной нотации. Но 0.000442615029219009 больше, чем 0.0001 и поэтому форматируется с использованием фиксированной нотации.

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

FloatToStrF — Функция Delphi

У меня — результат вычисления выражения, введенного пользователем.
Скажем так, что-то наподобие результата вычисления произвольного скрипта. Просчитывать, сколько знаков должен содержать результат — это ой как не просто.

>STAKANOV
Сори, чего-то протормозил проверить. Код:
FloatToStr(double(-58.399999999999999))
приводит к тому же результату

А может попробовать скопировать целиком дельфовую функцию из исходников? Там вся функция на ассемблере. Только вот не знаю двух вещей:
1. Что за <$IFDEF PIC>? (что такое <$IFDEF>я знаю).
2. Будет ли такой код потом работать под Линуксом (вызовов прерываний в нем нет)?

1. В Дельфи символ PIC определен при компиляции позиционно-независимого кода. Это необходимо для Linux, где не поддерживается таблица релокации. В винде можно и без него, но с ним не повредит — просто объем кода будет чуть-чуть побольше.
2. Заставить код работать под Linux теоретически можно (он ведь в исходном варианте там работает), но сколько на это придется угробить сил — сказать сложно.

А вообще, я бы еще поэкспериментировал с ф-цией FormatFloat . Она дает несколько иные результаты, нежели FloatToStr. Также наблюдается определенная разница между Format(‘%f’, [value]) и Format(‘%g’, [value]) .

Delphi FloatToStr — Why is the display different?

Using the DEFAULT FloatToStr function

dropping one zero after the decimal place

Can someone please explain why the value in the second case is not output to

3 Answers 3

The conversion uses general number format with 15 significant digits.

To interpret that statement you need also to refer to the topic describing the Format function, and specifically the text concerning the general number format (emphasis mine):

The value is converted to the shortest possible decimal string using fixed or scientific format. The number of significant digits in the resulting string is given by the precision specifier in the format string; a default precision of 15 is assumed if no precision specifier is present. Trailing zeros are removed from the resulting string, and a decimal point appears only if necessary. The resulting string uses the fixed-point format if the number of digits to the left of the decimal point in the value is less than or equal to the specified precision, and if the value is greater than or equal to 0.00001. Otherwise the resulting string uses scientific format.

Unfortunately the documentation is in fact in error there. Instead of 0.00001 it should read 0.0001 . That this is illustrated by this program:

For your examples, 0.0000442615029219009 is less than 0.0001 and so is formatted using scientific notation. But 0.000442615029219009 is greater than 0.0001 and so gets formatted using fixed notation.

If you want your output always to use scientific notation then use Format with the e format string.

Delphi 2006. Справочное пособие: Язык Delphi, классы, функции Win32 и .NET. — Архангельский А.Я.

Глава 12 > Описания функций

логичные возможности предоставляет задание провайдера Provider интерфейса IFormatProvider (см. примеры применения этих параметров в описании похожей функции CurrToStr).

Если преобразуемое выражение окажется не числом, функция вернет значение «NAN». Если преобразуемое значение превышает по модулю величину, допустимую для объявленного типа данных, функция вернет значение «INF» (бесконечность) или «-INF» (минус бесконечность).

Если вам требуется управление форматом представления чисел, лучше использовать функции FloatToStrF или FloatToText.

Примеры применения функции вы найдете в разд. 4.15.1 и 4.15.2. FloatToStrF

Преобразует действительное значение в строку, используя заданный формат, точность и число цифр

Библиотеки VCL Win32, VCL .NET

Модуль в VCL Win32 SysUtils

Пространство имен в .NET Borland.Vcl.SysUtils


в SysUtils и Borland.Vcl.SysUtils:

type TFloatFormat = (ffGeneral, ffExponent, ffFixed,

function FloatToStrF(Value: Extended; Format: TFloatFormat;

Precision, Digits: Integer): string;

function FloatToStrF(Value : Extended; Format: TFloatFormat;

Precision, Digits: Integer,

const FormatSettings: TFormatSettings): string;

function FloatToStrF(Value: Extended; Format: TFloatFormat;

Precision, Digits: Integer, Provider: IFormatProvider): string;

Функция FloatToStrF преобразует действительное значение Value в строку, используя заданный формат Format, точность Precision и число цифр Digits.

Параметр Value — действительная константа или выражение. Возможные значения параметра означают следующее:

ffGeneral Основной числовой формат g
ffExponent Научный формат е
ffFixed Формат с фиксированной запятой f
ffNumber Числовой формат п
ffCurrency Монетарный формат m FIoatToText

Подробное описание всех этих форматов см. в разд. 11.1.3.1.

Параметр Precision определяет точность преобразовываемого значения. Значение Precision должно быть не более 7 при преобразовании типа Single, не более 15 для Double, не более 18 для Extended.

Параметр Digits совместно с Format определяют форматирование строки. Подробнее см. в разд. 11.1.3.1.

Параметр FormatSettings позволяет задать или изменить характеристики строкового представления чисел, свойственные указанной локализации. Аналогичные возможности предоставляет задание провайдера Provider интерфейса IFormatProvider (см. примеры применения этих параметров в описании похожей функции CurrToStr).

Если преобразуемое выражение окажется не числом, функция вернет значение «NAN». Если преобразуемое значение превышает по модулю величину, допустимую для объявленного типа данных, функция вернет значение «INF» (бесконечность) или «-INF» (минус бесконечность).

Пример применения функции вы найдете в гл. 9 в описании переменной CurrencyFormat.

Формирует строку, отображающую указанное численное значение в заданном формате

Библиотека VCL Win32

Модуль SysU tils

type TFloatValue = (fvExtended, fvCurrency);

(ffGeneral, ffExponent, ffFixed, ffNumber, ffCurrency);

function FloatToText(BufferArg: PAnsiChar, var Value: ,

ValueType: TFloatValue, Format: TFloatFormat, Precision: Integer, Digits: Integer): Integer;

function FloatToText(BufferArg: PAnsiChar, var Value: ,

ValueType: TFloatValue, Format: TFloatFormat,

Precision: Integer, Digits: Integer,

var FormatSettings: TFormatSettings): Integer;

Функция FloatToText заносит в буфер BufferArg отформатированную строку, представляющую собой результат применения строки описания формата Format к действительному значению Value типа Extended или Currency. Тип Value указывается параметром ValueTvpe. Значение Format определяет формат отображения: ffGeneral — обобщенный, ffExponent — научный, ffFixed — с фиксированной запятой, ffNumber — числовой, ffCurrency — монетарный. Подробные характеристики этих форматов см. в гл. 9 в описании типа TFloatFormat. Пара- 1006

Глава 12 ¦ Описания функций

метр Precision определяет точность, параметр Digits в зависимости от формата определяет или число цифр после десятичной запятой, или число цифр после символа порядка «Е». Влияние этих параметров поясняется для каждого формата в описании TFloatFormat. Функция не заносит в буфер BufferArg завершающий нулевой символ, и возвращает число занесенных символов. Так что при необходимости занести нулевой символ или продолжить строку можно воспользоваться этим значением.

Первая форма функции берет характеристики форматирования из текущей локализации. Вторая форма позволяет задавать эти характеристики с помощью объекта FormatSettings типа TFormatSettings (см. описание этого типа в гл. 9).

Следующий код отображает в окне Editl форматированное значение переменной А.

FloatToStrF — Функция Delphi

а лишь проверяет такую возможность ? Что-то не найду.

А что мешает сделать try . except и в зависимости от этого принять решение.

Т.е. так :

boo:=true;
try strtofloat(«123s»);
except boo:=false;end;
if boo=false then messagedlg(«А строка-то не float»,mterror,[mbok],0);

Хотя,возможно,есть что-то и попроще.

GanibalLector © (05.11.04 1:49) [2]
boo=false

Константы True и False для присвоения но не для сравнения !

В Дельфи сравнивать сравнительно безопасно, но не привыкай так писать !

GanibalLector © (05.11.04 1:49) [2]
Хотя,возможно,есть что-то и попроще.

есть.
boo := TextToFloat(PChar(S), Result, fvExtended);
if not boo then
showmessage(«А строка-то не float»);

2 GuAV ©
Что сказать. Вы как всегда на высоте!

Кстати ещё есть одна. TryStrToFloat


> boo := TextToFloat(PChar(S), Result, fvExtended);

А если Result ненужен ? Зачем лишние переменные вводить ?

На самом деле есть много случаев где довольно сложно проверить возможность того или иного действия. Проще сделать а потом смотреть получилось ли.

В данном случае если пытаться проверить перед преобразованием имхо наибольшую сложность представляет проверка на вписывание в диапазон extended.

Стандарной функции нет.

[6]
пиши свою тогда
если бы в TryStrToFloat была проверка второго параметра на nil то можно было так сделать
if TryStrToFloat(PChar(S), PExtended(nil)^)
но такой код не будет вызывать AV лишь при «нефлотной» строки

default © (05.11.04 2:15) [9]
TryStrToFloat(PChar(S), PExtended(nil)^)

Интересная техника. Такое может работать в случае необязательного параметра импортированной внешняей функции. Например, последний параметр в CreateThread, необязательный в 2k и выше.

Однако вряд ли найдётся функция Дельфи, делающая проверку var-параметра на nil (тем более вряд ли это будет документировано), и писать свои такие функции также не советую.

> Хотя,возможно,есть что-то и попроще.

> А если Result ненужен ? Зачем лишние переменные вводить ?

var W : Integer;
AText : String;
AValue : Real;

Val( AText, AValue, W);
if W<>0 then
ShowMessage(«симовол «»+AText[W]+»» портит всю кухню»);

я вам там письмецо отправил по поводу преобразований ;>
взглянете?

> если бы в TryStrToFloat была проверка второго параметра на nil то можно было так сделать
if TryStrToFloat(PChar(S), PExtended(nil)^)

Чушь полная.
Если бы вторым параметром был бы указатель, но вторым параметром является тип Extended, поэтому AV должен возникнуть еще до вызова функции. Если каким-то чудом вы избегаете AV, то это именно чудом.

Defunct © (05.11.04 2:58) [12]
. Если каким-то чудом вы избегаете AV, то это именно чудом.

В пятерке нет этой функции — но рискну предположить, там используется VAR параметр, что эквивалентно указателю..

скажем так — ссылка не эквивалентна указателю, но реализуется именно с помощью указателя..


> jack128 © (05.11.04 03:17) [14]
> скажем так — ссылка не эквивалентна указателю

А в каких случаях отличается ?

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

> А в каких случаях отличается ?

Вот пример, поясняющий в каких случаях отличается:

// value — ссылка
procedure Set55(var Value:Integer);
begin
Value := 55;
end;

// value — указатель
procedure Set55_2(Value: PInteger);
begin
Value^ := 55;
end;

По ассемблерному коду эти процедуры будут идентичны, но как видите явное использование указателя предполагает применение доп. символа ^.


jack128 © (05.11.04 04:09) [16]


> jack128 © (05.11.04 04:09) [16]
> в тех, что ссылка не может иметь неопределённого значения

Даже если это отрицательное число ? :)


> Кто—то © (05.11.04 07:30) [19]
>
> > jack128 © (05.11.04 04:09) [16]
> > в тех, что ссылка не может иметь неопределённого значения
>
> Даже если это отрицательное число ? :)

LMD!

Кто—то © (05.11.04 7:30) [19]
поэтому AV должен возникнуть еще до вызова функции

Нет. Причём никакого «чуда».

jack128 © (05.11.04 4:09) [16]
Функции WinAPI часто объявляют с var параметрами. Хотя иногда есть возможность передать NULL.

В принципе Delphi функция c var параметром тоже может принимать nil. Я немного изменил пример от Defunct ©.

// value — ссылка
procedure Set55(var Value:Integer);
begin
if @Value = nil then
ShowMessage(«nil»)
else
Value := 55;
end;

// value — указатель
procedure Set55_2(Value: PInteger);
begin
if Value = nil then
ShowMessage(«nil»)
else
Value^ := 55;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Set55(PINteger(nil)^);
Set55_2(nil);
end;

Я не призываю так писать, однако при передаче nil как параметра AV гарантированно не будет.

GuAV © (05.11.04 11:04) [21]
AV гарантированно не будет.

. В вызывающей подпрограмме, если и будет, то в вызываемой.

[12]
необоснованная категоричность
никакой это не бред
увидел как-то этот трюк в исходниках Inno Pascal-я
там он использовался в WriteProcessMemory
поскольку параметр LPDWORD lpNumberOfBytesWritten
был не нужен, переменную заводить влом и документация позволяет
«Points to the actual number of bytes transferred into the specified process. This parameter is optional. If lpNumberOfBytesWritten is NULL, the parameter is ignored. «

GuAV © (05.11.04 11:04) [21]
В принципе Delphi функция c var параметром тоже может принимать nil.

Ну это лишь особенность реализации ссылок в дельфи.

default © (05.11.04 12:26) [23]
> необоснованная категоричность

почему это необоснованная?

PExtended(nil)^) = nil^ = значение из ячейки с адресом 00000000 = AV = Чушь полнейшая и т.д. все, что написано в [12].

насчет того что вы дальше написали.
так и передавайте NULL или Nil или 0.
зачем извращаться (nil^)?

Defunct © (05.11.04 20:00) [25]

PExtended(nil)^) = nil^ = значение из ячейки с адресом 00000000 = AV = Чушь полнейшая

В общем случае да.

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

В коде вызова функций написанных на Delphi разумеется не следует так писать.

Однако если имеется внешяя функция описанная с var параметром, а в справке объявлена с соотвествующим параметром-указателем (в С var параметров нет) и документировано, что она может принимать nil то эта техника ИМХО вполне приемлема.

Вы можете сказать что это стрёмный трюк, специфичный для данной реализации. Однако не менее стрёмный чем например asm-код.

А почему для ХР дистрибутив меньше и при этом у меня в 9х вроде запустилось ?

Defunct © (05.11.04 20:00) [25]
так в том-то и дело что nil компилятор не даст передать, так как подразумевается(если это var-параметр) его изменение изнутри вызываемого кода, а «трюк» этот чтобы компилятор «съел» nil вот и всё

Delphi FloatToStr — Почему дисплей отличается?

Использование функции ПО УМОЛЧАНИЮ FloatToStr

падение нуля после десятичной точки

Может кто-нибудь объяснить, почему значение во втором случае не выводится на

Документация для FloatToStr содержит ответ:

Преобразование использует формат общего номера с 15 значащими цифрами.

Чтобы интерпретировать этот оператор, вам также нужно обратиться к теме, описывающей функцию Format , и, в частности, текст, касающийся формата общего номера (выделение мое):

Значение преобразуется в кратчайшую возможную десятичную строку с использованием фиксированного или научного формата. Число значащих цифр в полученной строке задается спецификатором точности в строке формата; стандартная точность 15 предполагается, если нет спецификатора точности. Исходящие нули удаляются из результирующей строки, и десятичная точка появляется только при необходимости. Полученная строка использует формат с фиксированной запятой, если количество цифр слева от десятичной точки в значении меньше или равно указанной точности, а , если значение больше или равно 0,00001 . В противном случае результирующая строка использует научный формат.

К сожалению, документация на самом деле ошибочна. Вместо 0.00001 он должен читать 0.0001 . Это иллюстрируется этой программой:

Для ваших примеров 0.0000442615029219009 меньше 0.0001 и поэтому форматируется с использованием научной нотации. Но 0.000442615029219009 больше, чем 0.0001 и поэтому форматируется с использованием фиксированной нотации.

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

Функции Delphi

Стандартные функции Delphi:

Для проведения всевозможных математических вычислений и многочисленных преобразований язык программирования Delphi содержит библиотеки стандартных процедур и функций. Давайте подробнее рассмотрим стандартные функции Delphi.

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

откуда ln — функция, вычисляющая натуральный логарифм числа exp(x), exp — функция, вычисляющая экспоненту в степени x, x — число, n-ую степень которого надо найти, а n — степень числа x. Каждая функция обладает следующими характеристиками: тип значений, тип параметров.

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

Математические функции Delphi:

Библиотеки языка Delphi включаются в себя и множество математических функций:

Величину угла при использовании тригонометрических функций необходимо выражать в радианах. Чтобы преобразовать угол из градусов в радианы, используйте следующую формулу:

где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:

Функции преобразования Delphi:

Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.

Пример.

В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:

Применение функций Delphi:

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

Примеры.

Структура функции Delphi

Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.

В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.

Когда инструкции функции завершат свое выполнение, значению переменной result присваивается значение функции. Таким образом, среди всех инструкций функций необходимое присутствие инструкции, которая бы присваивала переменной result окончательное значение функции. Обычно подобная инструкция есть последняя исполняемая инструкция функции. Представим пример функции FuntToKg, преобразующей фунты в килограммы.

Delphi FloatToStr — Почему дисплей отличается?

Использование DEFAULT функции FloatToStr

сбросив один ноль после десятичной точки

Может кто-то пожалуйста, объясните, почему значение во втором случае не выводится

Преобразования используют общий формат число с 15 значащими цифрами.

Для того, чтобы интерпретировать это заявление вам нужно также обратиться к теме , описывающее Format функцию, и , в частности текст относительно формата общего числа (курсив мой):

Значение преобразуется в кратчайшую десятичную строку , используя фиксированный или научный формат. Количество значащих цифр в полученной строке задается спецификатором точности в строке формата; по умолчанию точность 15 предполагается , если не Спецификатор точности нет. Завершающие нули удаляются из результирующей строки, и десятичная точка появляется только при необходимости. Результирующая строка использует формат с фиксированной точкой , если число цифр слева от десятичной запятой в значении меньше или равна заданной точностью, и , если значение больше или равно 0,00001 . В противном случае результирующая строка использует научный формат.

К сожалению, документация на самом деле ошибка там. Вместо 0.00001 него следует читать 0.0001 . То, что это иллюстрируется в этой программе:

Для ваших примеров, 0.0000442615029219009 меньше 0.0001 и поэтому отформатирован с использованием научной нотации. Но 0.000442615029219009 больше 0.0001 и поэтому получает отформатирован с использованием фиксированных обозначений.

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

Илон Маск рекомендует:  Атрибут data в HTML
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL