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

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

Как узнать количество знаков после запятой?


Страницы:   1 2 3

arhis ©   (2006-09-21 16:57:00) 

узнаю так:


met:=2;
PrBuf:=(Deal.Price-Int(Deal.Price))*10;
While true do
 begin
  PrBuf:=PrBuf*10;
  if (PrBuf-Int(PrBuf))=0 then break;
  inc(met);
 end;

работает кроме случая 100.023
В этом случае релультат вычитания аномален.
Может это вообще можно както прощще сделать?


arhis   (2006-09-21 18:54:00) [21]

Ketmar ©   (21.09.06 18:37) [21]
Вы, сударь попытались бы лучше объяснить в чем проблема а не упражнятся в намеках. Насколько я понимаю ветка называется начинающим? Я по адресу попал?


arhis   (2006-09-21 18:52:00) [22]

han_malign ©   (21.09.06 18:30) [20]

я не совсем понимаю причем тут погрешности?
Я беру число 0,023 и умножаю его на 100, и всегда получаю 2,3 хоть тресни. потом умножаю еще на десять и получаю 23. Потом просто вычитаю из 23 23 и не получаю нуля?
Где моя логика неправа?


Ketmar   (2006-09-21 18:37:00) [23]

>[20] han_malign(c) 06-09-21 18:30
аффтару на это уже намекали. %-)


han_malign   (2006-09-21 18:30:00) [24]


> Тайна сия велиуа есть.

- угу, тебе число Пи до какого знака выводить?
Ты вообще понимаешь, что каждый раз когда умножаешь на 10 - увеличиваешь в 10 раз погрешность?
У extended 19-20 - значимых цифр, умножив на 100 - 100.023 ты и получаешь погрешность в (19-5)-знаке(2,842*10-14), и дальше эта погрешность может увеличиваться... Другое дело, что, в зависимости от конкретного значения, погрешность умножения на 10 может быть и нулевой - но это скорее исключение.


arhis   (2006-09-21 17:56:00) [25]

Тайна сия велиуа есть.
0.0012 работает
0.0011 не работает


Ketmar   (2006-09-21 17:19:00) [26]

>[17] arhis 06-09-21 17:18
>тому же повторюсь уж слишком смущает столь
>экстравагантный результат простейшей
>математической операции.
"это дубли у нас простые" (ц)


arhis   (2006-09-21 17:18:00) [27]

Ketmar ©   (21.09.06 17:09) [13]
Да, моя религия мне не позволяет чисто математическую задачу решать чернез строки. К тому же повторюсь уж слишком смущает столь экстравагантный результат простейшей математической операции.


arhis   (2006-09-21 17:13:00) [28]

2,842*10-14 это не ноль


arhis   (2006-09-21 17:12:00) [29]

Наиль ©   (21.09.06 17:08) [12]
Пробовал не определяет как ноль


Наиль   (2006-09-21 17:09:00) [30]

В [12] опечатку сам исправишь


Ketmar   (2006-09-21 17:09:00) [31]

>[7] arhis 06-09-21 17:05
>или экспонента или сам указывай число знаков а
>мне и нужно узнать их количество
указать побольше, лишние нули обрезать -- религия запрещает?


Наиль   (2006-09-21 17:08:00) [32]


>   if (PrBuf-Int(PrBuf))=0 then break;

Uses Math
if IsZero(PrBuf) then break;


arhis   (2006-09-21 17:07:00) [33]

XTD ©   (21.09.06 17:06) [8]
Вы алгоритм смотрели? там как раз и умножается а потом вычитается челое, но потом происходит глюк с арифметической операцией, вот я и спрашиваю что я делаю не так. Frac мне вообще от 234 возвращает 1


palva   (2006-09-21 17:06:00) [34]

Если число представлено с погрешностью, то количество знаков узнать невозможно. Ну а если число представлено точно, то перевести в десятичную систему и посчитать нули.


arhis   (2006-09-21 17:06:00) [35]

К тому же после таких арифметических вывертов становиться как то очень не спокойно на душе.


XTD   (2006-09-21 17:06:00) [36]

(5) Умнож на 100


arhis   (2006-09-21 17:05:00) [37]

или экспонента или сам указывай число знаков а мне и нужно узнать их количество


Ketmar   (2006-09-21 17:05:00) [38]

конвертируй в строку, работай со строкой.


arhis   (2006-09-21 17:05:00) [39]

Int к дроби?


XTD   (2006-09-21 17:02:00) [40]

Отними от твоего числа целое, останется после запятой Length(IntToStr(S))


Страницы:   1 2 3

Наверх

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