Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форматирование Double [D6]


Страницы:   1 2

kull ©   (2002-04-26 10:54:00) 

Такой вопрос:
Делаю Format("%.2f",[11111111111111111111.0]);
На выходе получается 1,11111111111111111E19 ,
а надо: 11111111111111111100,00 ,как сделать?


kull   (2002-04-27 10:59:00) [1]

Спасибо за помощь!


Anatoly Podgoretsky   (2002-04-27 10:38:00) [2]

Игорь Шевченко © (27.04.02 10:25)
В любом случае пришли к предложению Johnmen © (26.04.02 13:11), что и требовалось доказать.


Игорь Шевченко   (2002-04-27 10:25:00) [3]

День добрый, Andrey007,

FloatToStrF:

The Precision parameter specifies the precision of the given value.
It should be 7 or less for values of type Single, 15 or less for values of
type Double, and 18 or less for values of type Extended.

....Так что 350 никак не получится... :-)))

С уважением,


Andrey007   (2002-04-27 09:49:00) [4]

FloatToStrF(x,ffFixed,350,300);
Или Вы что-то другое имели в виду?


Alx2   (2002-04-27 09:31:00) [5]

>Anatoly Podgoretsky © (27.04.02 09:22)
Угу
>Alx2 © (27.04.02 08:34)
Алгоритм работает для D>1


Anatoly Podgoretsky   (2002-04-27 09:22:00) [6]

Если учесть, что логарифм числа уже приведен в отформатированном числе y.yyyExx, то его необязательно расчитывать, можно использовать уже готовое.


Alx2   (2002-04-27 08:34:00) [7]

Короче говоря, алгоритм будет выглядеть так:

Function ScoffingValue(D: Extended): String;
Var
Lg : Extended;
IntPart, ix: Integer;
Begin
Lg := Log10(D);
IntPart := round(Int(Lg));
Result := FloatToStr(Power(10, frac(Lg)));
ix := Pos(DecimalSeparator, Result);
If ix > 0 Then Delete(Result, ix, 1);
If IntPart + 1 > Length(Result) Then
Result := Result + StringOfChar("0", 1 + IntPart - Length(Result));
If IntPart + 1 < Length(Result) Then
Insert(DecimalSeparator, Result, IntPart + 2);
End;


Alx2   (2002-04-27 07:41:00) [8]

>kull © (26.04.02 16:39)
:))
>десятичный логарифм от 123 = 2.0899051114
Сначала исправлюсь вместо:
"Целая часть десятичного логарифма модуля числа даст уменьшенное на единицу число, на которое надо вправо двинуть запятую"
Следует читать
"Целая часть десятичного логарифма модуля числа даст число, на которое надо вправо двинуть запятую"


Дробная часть: d=0.0899051114
10^d=1.23
Целая часть: 2
Смещаем запятую на две позиции вправо: 1.23 .. 12.3 ... 123.

Все.

Еще пример: Log10(11111111111111111111)=19.045757490560675126
Дробная часть: 0.045757490560675126
10^0.045757490560675126 = 1.11111111111111111262 Смещаем запятую на 19 позиций вправо (19 - целая часть)
Получаем: 11111111111111111126.2


kull   (2002-04-26 16:39:00) [9]

Нет может я что-то не так понял.
Но исходя из этой фразы -
"Целая часть десятичного логарифма модуля числа даст уменьшенное на единицу число, на которое надо вправо двинуть запятую, 10^<дробная часть> даст число, у которого эту запятую двигают."
я получаю следующее:
число 123
десятичный логарифм от 123 = 2.0899051114
целая часть от этого числа 2, а дробная 0899051114
значит сдвигая на право на 2+1 получим 89.9051114 так
или не так?



kull   (2002-04-26 16:09:00) [10]


> Ну значит не понял, что тебе Alx2 © (26.04.02 15:32) написал

Ну так разъясни пожалуйста.


Anatoly Podgoretsky   (2002-04-26 16:06:00) [11]

Ну значит не понял, что тебе Alx2 © (26.04.02 15:32) написал


kull   (2002-04-26 15:57:00) [12]


> Это не точность, а алгоритм тебе для действия

а Log10(123.0) пробовали?
= 2.0899051114
89.9 = 123 ну очень примерно...


Anatoly Podgoretsky   (2002-04-26 15:53:00) [13]

kull © (26.04.02 15:44)
Это не точность, а алгоритм тебе для действия


kull   (2002-04-26 15:47:00) [14]


> Единица измерения: микрокопейки ? :-)))

Ну примеро так :)


kull   (2002-04-26 15:44:00) [15]


> Целая часть десятичного логарифма модуля числа даст уменьшенное
> на единицу число, на которое надо вправо двинуть запятую,
> 10^<дробная часть> даст число, у которого эту запятую двигают.

Ну не до такой же степени не важна точность.


Игорь Шевченко   (2002-04-26 15:42:00) [16]

День добрый, Kull,

А данные в отчете гарантировано бывают такие большие ?

Единица измерения: микрокопейки ? :-)))

С уважением,


kull   (2002-04-26 15:33:00) [17]


> MBo © (26.04.02 15:31)

О! да ты колдун!


Alx2   (2002-04-26 15:32:00) [18]

>kull © (26.04.02 15:27)
>точность теряется и ладно.

Целая часть десятичного логарифма модуля числа даст уменьшенное на единицу число, на которое надо вправо двинуть запятую, 10^<дробная часть> даст число, у которого эту запятую двигают.


MBo   (2002-04-26 15:31:00) [19]

label1.caption:=format("%18d",[111111111111111111])+"00.00";
:)


kull   (2002-04-26 15:30:00) [20]


> Кстати, вопрос: А зачем такие мучения нужны (в смысле, что
> за задача) ?

Да просто нужно выводить в отчете число без буквы Е в формате с 2 знаками после запятой.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо