Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

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

 
Megabyte ©   (2006-06-14 18:18) [0]

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


 
unknown ©   (2006-06-14 18:22) [1]

Math.RoundTo


 
ANB ©   (2006-06-14 18:36) [2]


> Math.RoundTo

Но будет банковское округление вместо математического.


 
Megabyte ©   (2006-06-14 18:39) [3]

Эй, мне не округлять надо, а урезать знаки после запятой( до 2-х). Или я неправильно пользуюсь:
RoundTo(o_prih_r + o_prih_r1, 2);?
o_prih_r + o_prih_r1 - числа типа Real.


 
Desdechado ©   (2006-06-14 20:26) [4]

> мне не округлять надо, а урезать знаки
тогда что есть "урезать знаки"?
давай пример до и после урезания


 
Desdechado ©   (2006-06-14 20:27) [5]

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


 
unknown ©   (2006-06-14 21:11) [6]


> ANB ©   (14.06.06 18:36) [2]
> > Math.RoundTo
> Но будет банковское округление

Можно указать режим округления - в контрольном слове сопроцессора, что,
собственно и делает Math.SetRoundMode


 
Megabyte ©   (2006-06-15 10:35) [7]


> Desdechado ©   (14.06.06 20:27) [5]
> и вообще - числа с плавающей точкой имеют весьма интересный
> способ хранения, который подразумевает погрешность, влекущую
> за собой мнооооого знаков

Во-во.
Вот пример:
дано: 56,24000048
хочу: 56,24


 
StriderMan ©   (2006-06-15 10:42) [8]


Result := trunc(Value * 100) / 100;


 
Ega23 ©   (2006-06-15 10:53) [9]


> Result := trunc(Value * 100) / 100;


Неправильно.


 
evvcom ©   (2006-06-15 11:03) [10]

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

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


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

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

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


 
StriderMan ©   (2006-06-15 11:26) [12]


> 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


 
Megabyte ©   (2006-06-15 11:28) [13]

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


 
Desdechado ©   (2006-06-15 11:33) [14]

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


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


> Desdechado ©

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

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

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


 
icWasya ©   (2006-06-15 12:05) [16]

FormatFloat ???


 
StriderMan ©   (2006-06-15 12:07) [17]


> FormatFloat ???

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


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

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

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


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

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


 
Megabyte ©   (2006-06-15 12:58) [20]

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


 
Zeqfreed ©   (2006-06-15 13:04) [21]

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

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


 
Megabyte ©   (2006-06-15 13:20) [22]


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

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


 
StriderMan ©   (2006-06-15 13:24) [23]


> Megabyte

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


 
Megabyte ©   (2006-06-15 15:09) [24]


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

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


 
Loginov Dmitry ©   (2006-06-15 16:46) [25]

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


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


 
Desdechado ©   (2006-06-15 16:52) [26]

> различия между 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:55) [27]

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


 
Desdechado ©   (2006-06-15 17:01) [28]

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.03 c
1-1148481499
redlord
2006-05-24 18:38
2006.07.02
мессага для listview


10-1121666784
ORMADA
2005-07-18 10:06
2006.07.02
IDE получить имя текущего проекта


2-1150270186
novill
2006-06-14 11:29
2006.07.02
Надо написать прогу в виде службы Windows. С чего начать?


15-1149750722
QuickFinder
2006-06-08 11:12
2006.07.02
Софт для редактирования MP3-файлов


15-1149437472
SupeR_St@R
2006-06-04 20:11
2006.07.02
проблема со STEAM