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

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

"Памогите, кто знаете". Почему ответ не верный? [D7, WinME, WinXP]


LEXX_55 ©   (2004-11-04 11:27:00) 

Есть строка А := Trunc(В*100) mod 100; . В- вещественное, А- целое. Врезультате " А" получается на 1 меньше чем должно быть. До 30, все " А" которые делятся на 3 - не верны, после 30 вообще... В чем причина и как победить. Заранее спасибо.


Verg   (2004-11-04 12:22:00) [1]


> почему другие числа правильно расчитываются


Потому, что они имеют точное представление в конечной разрядной сетке.
Например, 1/2, 1/4, 1/8 и т.д. до некоторого 1/(2^N), где N <> INFINITE, а также суммы комбинаций таких чисел.


> мне что, определить все числа и ввести на них поправку

А поправку ты как собрался представлять, и чем тебе не угодило округление?

round( x * 100 )


LEXX_55   (2004-11-04 12:20:00) [2]

конечно, я могу число перевесть в строку и попелить ее. но это не очень хороший и быстрый путь.


LEXX_55   (2004-11-04 12:07:00) [3]

почему другие числа правильно расчитываются, мне что, определить все числа и ввести на них поправку? Их же мама родная.


Verg   (2004-11-04 12:04:00) [4]

Ну не представимо число 0,15 в разрядной сетке конечной длины.
0.149999999999994 - это на самом деле


TUser   (2004-11-04 11:56:00) [5]

Странно - у меня заработало (D7), правда почему так - я до сих пор репу чешу. В 'Неочевидных особенностях ... ' ничего вроде нет.


LEXX_55   (2004-11-04 11:54:00) [6]


>   b:=0.15; b:=b*100;
>   a:=trunc(b{*100}) mod 100;

эффект тот же


TUser   (2004-11-04 11:45:00) [7]

procedure TForm1.Button1Click(Sender: TObject);
var b:real;
   a:integer;
begin
  b:=0.15; b:=b*100;
  a:=trunc(b{*100}) mod 100;
  label1.Caption:=inttostr(a);
end;


LEXX_55   (2004-11-04 11:43:00) [8]

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


LEXX_55   (2004-11-04 11:40:00) [9]

а что нужно?


Pavel_Pavel   (2004-11-04 11:38:00) [10]

Trunc не нужен


LEXX_55   (2004-11-04 11:35:00) [11]

Мне надо ответ на печать выдать. А он черт знает что показывает.


LEXX_55   (2004-11-04 11:32:00) [12]

к примеру: В = 0,15, А должно получиться 15, но в итоге А=14.


TUser   (2004-11-04 11:29:00) [13]


> "А" получается на 1 меньше чем должно быть.

А что долюно юыть и кому оно должно?


Наверх

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