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

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

Как "урезать" лишние знаки после запятой у чисел типа real?


Страницы:   1 2

Megabyte ©   (2006-06-14 18:18:00) 

Сабж.
Есть функция format, но там параметр типа string. Как-то неохота туда/сюда переформатировать...


SergP.   (2006-06-15 17:43:00) [1]


> Megabyte ©   (15.06.06 15:09) [24]
>
> > StriderMan ©   (15.06.06 13:24) [23]
> > > Megabyte
> >попробуй все-таки мой подход
>
> Ну ничего больше не остается. %)


Если нужно без проблем "отсекать" лишние десятичные знаки  - используй Currency и не мучайся... Но числа у которых более 4-х дес. знаков там уже не получится хранить...


Desdechado   (2006-06-15 17:01:00) [2]

нет, не сопроцессоров, а Win32


Loginov Dmitry   (2006-06-15 16:55:00) [3]

Да, то было раньше - еще по появления сопроцессоров...


Desdechado   (2006-06-15 16:52:00) [4]

> различия между Real и Double?
если мне память не изменяет, раньше Real был тот, который сейчас Real48
Type Range Significant digits Size in bytes
Real 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10


Loginov Dmitry   (2006-06-15 16:46:00) [5]

evvcom ©   (15.06.06 11:03) [10]
Это тебе кажется. А чтобы не казалось, используй Double или Extended. А с Real от этого не избавишься.


Интересно, в чем вы видите различия между Real и Double?


Megabyte   (2006-06-15 15:09:00) [6]


> StriderMan ©   (15.06.06 13:24) [23]
> > Megabyte
>попробуй все-таки мой подход

Ну ничего больше не остается. %)


StriderMan   (2006-06-15 13:24:00) [7]


> Megabyte

попробуй все-таки мой подход


Megabyte   (2006-06-15 13:20:00) [8]


> Zeqfreed ©   (15.06.06 13:04) [21]

Кошмар!!! :) Внимательно читаем!
Да в ячейках все в порядке, траблы с отображением в строко формул вверху, кот. отображает выделенную ячейку!


Zeqfreed   (2006-06-15 13:04:00) [9]

> Я же написал уже, мне пофигу, как они хранятся, мне надо
> это для отображения в экселе.

Для этого в Excel'е есть соответствующие параметры форматирования текста в ячейках.


Megabyte   (2006-06-15 12:58:00) [10]

Я же написал уже, мне пофигу, как они хранятся, мне надо это для отображения в экселе.


Zeqfreed   (2006-06-15 12:11:00) [11]

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


evvcom   (2006-06-15 12:09:00) [12]

> [11] Desdechado ©   (15.06.06 11:10)
> evvcom ©   (15.06.06 11:03) [10]
> > Double или Extended
> это значительно уменьшает погрешность, обычно до недоступных
> разрядов, но не избавляет от проблемы совсем
> способ хранения, имхо, все тот же - мантисса, основание...

Я знаю. Потому и написал автору:
> Это тебе кажется. А чтобы не казалось


StriderMan   (2006-06-15 12:07:00) [13]


> FormatFloat ???

возвращает строку


icWasya   (2006-06-15 12:05:00) [14]

FormatFloat ???


StriderMan   (2006-06-15 11:42:00) [15]


> Desdechado ©

попробовал. работает.

 ShowMessage(FloatToStr(trunc(56.2400000048 * 100) / 100));

теперь попробуй сам.


Desdechado   (2006-06-15 11:33:00) [16]

StriderMan ©   (15.06.06 11:26) [12]
>> Неправильно.
> Почему?
А ты попробуй. А потом почитай-таки теорию по способам хранения чисел с плавающей точкой.


Megabyte   (2006-06-15 11:28:00) [17]

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


StriderMan   (2006-06-15 11:26:00) [18]


> Ega23 ©   (15.06.06 10:53) [9]
> > Result := trunc(Value * 100) / 100;
> Неправильно.

Почему?

56,24000048 * 100 = 5624,000048
trunc(5624,000048) = 5624
5624/100 = 56,24


Desdechado   (2006-06-15 11:10:00) [19]

Megabyte ©   (15.06.06 10:35) [7]
для отображения - Format
для хранения отсечь погрешность не получится, это фича

evvcom ©   (15.06.06 11:03) [10]
> Double или Extended
это значительно уменьшает погрешность, обычно до недоступных разрядов, но не избавляет от проблемы совсем
способ хранения, имхо, все тот же - мантисса, основание ...


evvcom   (2006-06-15 11:03:00) [20]

> дано: 56,24000048
> хочу: 56,24

Это тебе кажется. А чтобы не казалось, используй Double или Extended. А с Real от этого не избавишься.


Страницы:   1 2

Наверх

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