Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вывод вещественного числа


Автор: Yanochka 29.12.2004, 19:36
Для вывода вещественного числа с ограниченным количеством разрядов в дробной части числа в языке есть специальная функция преобразования строки в вещественное число. Назовите эту функцию и напишите все значения атрибута, определяющего формат записи вещественного числа:____________

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

Модуль Sysutils

Объявление

Код

type TFloatFormat = (ffGeneral, ffExponent, ffFixed,  ffNumber, ffCurrency);

function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string;


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

ffGeneral - Основной числовой формат
ffExponent - Научный формат
ffFixed - Формат с фиксированной запятой
ffNumber - Числовой формат
ffCurrency - Монетарный формат
Подробное описание всех этих форматов см. в TFloatFormat.

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

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



Определяет формат преобразования действительных чисел

Модуль Sysutils

Объявление

Код

type TFloatFormat = (ffGeneral, ffExponent, ffFixed, ffNumber, ffCurrency);


Описание
Тип TFloatFormat определяет коды форматирования чисел с плавающей запятой в функциях FloatToText, FloatToStrF, FloatToDecimal, TextToFloat. В этих функциях одновременно с форматом указываются два параметра: Precision - точность, и Digits - число цифр.
Возможные значения формата определяются следующими правилами форматирования:


ffGeneral - Основной числовой формат. Число преобразуется по формату с фиксированной точкой или научному в зависимости от того, какой из них оказывается короче. Начальные нули удаляются, десятичная точка ставится только при необходимости. Фиксированный формат используется, если число разрядов слева от точки не больше указанной точности Precision и если значение не меньше 0.00001. В противном случае используется научный формат, в котором параметр Digits определяет число разрядов степени - от 0 до 4
ffExponent - Научный формат. Число преобразуется в строку вида "-d.ddd...E+dddd". Общее число цифр, включая одну перед десятичной точкой, задается параметром Precision. После символа "E" всегда следует знак "+" или "-" и до четырех цифр. Параметр Digits определяет минимальное число разрядов степени - от 0 до 4
ffFixed - Формат с фиксированной точкой. Число преобразуется в строку вида "-ddd.ddd...". По крайней мере одна цифра всегда предшествует десятичной точке. Число цифр после десятичной точки задается параметром Digits, который может лежать в пределах от 0 до 18. Если число разрядов слева от десятичной точки больше указанного параметром Precision, то используется научный формат
ffNumber - Числовой формат. Число преобразуется в строку вида "-d,ddd,ddd.ddd...". Данный формат совпадает с ffFixed за исключением наличия в нем разделителей тысяч
ffCurrency - Монетарный формат. Число преобразуется в строку, отображающую денежную сумму. Формат контролируется глобальными переменными CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator, задаваемыми для монетарного формата разделом Currency Format элемента International Контрольной панели Windows. Число цифр после десятичной точки задается параметром Digits, который может лежать в пределах от 0 до 18
Для всех форматов действительные символы, используемые в качестве десятичной точки и разделителя тысяч определяются глобальными переменными DecimalSeparator и ThousandSeparator.


Если S - строка, а R - действительное число или выражение, то оператор
Код

S := FloatToStr( R );

даст следующие результаты при разных значениях R:

Цитата
R             S
-3           -3
5.1E20    5,1E20
Sqrt(2)   1,4142135623731
1E5000   INF

Оператор
Код

S := FloatToStrF(R,ffGeneral,7,0);

даст те же результаты, но для корня из 2 число цифр результата не превысит заданного значения 7: 1,414214. Как правило, формат ffGeneral с ограниченным числом цифр наиболее удачен для большинства применений.

Автор: dm9 29.12.2004, 21:31
Альтернатива:

Код
Memo1.Text := Format ('%.5f', [t]);

5 - число знаков после запятой, t - вещественная переменная.

Код
Memo1.Text := Format ('%.'+IntToStr(n)+'f', [t]);

n - число знаков после запятой, t - вещественная переменная.

У функции format есть ещё много интересных возможностей.

Автор: Yanochka 29.12.2004, 21:42
Alex, dm9
Большое спасибо
Записала вто как
Цитата
Format('%8.3f', [Count(Studs)])

не смотря на то что скажет препод smile

Автор: Alex 29.12.2004, 21:45
dm9, боюсь ее препод скажит, что это слишком заумно smile

Автор: dm9 29.12.2004, 21:57
Yanochka, если так:

Код
Format('%-8.3f', [Count(Studs)])


то циферка будет прижиматься к левому краю. Обычно так удобнее бывает smile
Добавлено @ 21:58
Alex, надо сказать, о возможности передавать в ф-цию несколько переменных через одну я узнал только из хелпа по ф-ции Format. Интересная функция smile

Автор: Alex 29.12.2004, 22:02
dm9, просто
Код
Edit1.Text:= Format('%8.3f', [Count(Studs)]);

Из http://forum.vingrad.ru/index.php?showtopic=37892&hl=Задача&st=15 smile

Автор: dm9 29.12.2004, 22:23
Понял smile

PS Оффтоп, конечно, но прочитал задание в той теме и мне стало очень хорошо от того, что мне такое программировать не надо smile)

Автор: Cheba 30.12.2004, 01:36
К этому заданию слегка не подходит, но все же...
В Паскале был, так называемый, форматированый вывод чисел:
Код
writeln(i:8:2);

Где первое число задает количество выводимых цифр, а второе количество цифр в дробной части.

К сожалению, эта конструкция в Delphi работает только с write/writeln. Больше мне нигде не удалось ее задействовать...

Автор: Dimich 30.12.2004, 09:32
Как вариант могу предложить еще процедуру
Код

procedure Str(X [: Width [: Decimals ]]; var S);

Автор: dm9 30.12.2004, 13:57
Dimich, интересно smile Я не знал, что такая ф-ция есть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)