Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2009, 17:10   #1
marina15056
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 68
По умолчанию что за странный результат?

интересно, это только у меня так? или я не знаю какой-то великой тайны?

Вобщем вчера скачала хороший учебник по дельфи и там есть такое выражение
sek := Trunc(t*100) mod 100;
я никогда trunc не использовала и решила его помучать, но еще сильней запуталась. Скорей всего у меня глючный дельфи, или я сама, но почему 310???.

procedure TForm1.Button1Click(Sender: TObject);
var t:real;
begin
label1.Caption:=inttostr(trunc(3.11 *100)); //=311
t:=3.11;
label2.Caption:=inttostr(trunc(t*10 0)) //=310???????
end;
procedure TForm1.Button2Click(Sender: TObject);
var t:real;
begin
label3.Caption:=inttostr(trunc(3.12 *100)); //=312
t:=3.12;
label4.Caption:=inttostr(trunc(t*10 0)) //=312
end;
procedure TForm1.Button3Click(Sender: TObject);
var t:real;
begin
label5.Caption:=inttostr(trunc(4.11 *100)); //=411
t:=4.11;
label6.Caption:=inttostr(trunc(t*10 0)); //=411
end;
marina15056 вне форума Ответить с цитированием
Старый 03.10.2009, 17:32   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Скорее всего проблема в точности real.
3.11*100=310.99999999999999996
А trunc просто обрубает всё, что после точки
trunc(310.99999999999999996)=310

З.ы. эт моё предположение
TwiX вне форума Ответить с цитированием
Старый 03.10.2009, 17:35   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

В официально хелпе рекомендуется использовать extended, попробуйте...
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 03.10.2009, 17:35   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
3.11*100=310.99999999999999996
Но тогда почему нормально реагирует на 4?
Код:
begin
label5.Caption:=inttostr(trunc(4.11 *100)); //=411
t:=4.11;
label6.Caption:=inttostr(trunc(t*10 0)); //=411
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.10.2009, 17:35   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Проблема скорее всего действительно в том, что указал TwiX. Кстати заметьте, функция trunc принимает аргумент x типа extended, и вот с ним никаких проблем вроде бы не возникает
-----------------------------------------------------------------------------
P.S. Синхронность на грани фантастики
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 03.10.2009, 17:37   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ну это значит из той же оперы, что:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var a: Real; n: Integer;
Begin
a:=443.432;
a:=(a-440)*100;     //  a = 443.432 - 440 * 100 = сколько..?    Вы думали 343.2..?   А нифига:
ShowMessage(FloatToStr(a));    //  a = 343.200000000002     Х_х
End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.10.2009, 17:40   #7
marina15056
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 68
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Скорее всего проблема в точности real.
3.11*100=310.99999999999999996
А trunc просто обрубает всё, что после точки
trunc(310.99999999999999996)=310

З.ы. эт моё предположение
но тогда real должен был и 411 тоже обрубить.

я тут на всякий случай решила выложить саму прогу, гляньте на досуге, может это моя ошибка (в смысле комповская)?

упс, пока писала, то уже отметили про 411
Вложения
Тип файла: rar stranno.rar (164.3 Кб, 6 просмотров)

Последний раз редактировалось marina15056; 03.10.2009 в 17:43.
marina15056 вне форума Ответить с цитированием
Старый 03.10.2009, 17:44   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Заменил Ваш real на extended - все нормально.
Вывод:
Забудьте про real.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.10.2009, 17:49   #9
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Заменил Ваш real на extended - все нормально.
Вывод:
Забудьте про real.
Вывод:
Проблема в real
TwiX вне форума Ответить с цитированием
Старый 03.10.2009, 17:51   #10
marina15056
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Заменил Ваш real на extended - все нормально.
Вывод:
Забудьте про real.
Вы правы, прощай real )))

А вообще я всегда пользовалась ansipos-ом и copy-ом для выделения целых чисел. Это всё учебник новый
marina15056 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странный код в input sniffer HTML и CSS 4 08.09.2009 21:40
Странный глюк Worda valerij Microsoft Office Word 6 28.06.2009 08:11
[B]Странный макрос[/B] mephist Microsoft Office Word 10 12.06.2009 11:46
Странный тип Yuran Общие вопросы Delphi 4 10.06.2008 10:11
Странный, не стандартный файл valerij Microsoft Office Excel 4 26.03.2008 12:24