Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Объясните плиз природу следующего глюка:   Найти похожие ветки 

 
tria   (2004-10-26 12:49) [0]

var v1,v2:variant;
begin
 //F1(TChild);
 v1:=3.66;
 v2:=12123.54;
 ShowMessage(VarToStr(Min(v1,v2)));
end;
Результат не 3.66, как казалось бы, а 4.


 
Warlock ©   (2004-10-26 12:50) [1]

Надо явно указывать тип параметров, поскольку
функция min - перегруженная


 
tria   (2004-10-26 12:57) [2]

Это я знаю, что перегруженная. При этом нет функции с параметрами типа Variant. Но почему она хватает тип Integer, не глядя на тип Variant? Есть какое-то правило на этот счет?


 
Warlock ©   (2004-10-26 13:01) [3]

Наверное зависит от порядка overload-ов в исходниках Delphi. Если бы первый был один из Float-ов, наверное твой код выполнялся бы верно


 
Ega23 ©   (2004-10-26 13:05) [4]

ShowMessage(VarToStr(Min(Float(v1),Float(v2))));   ?


 
GuAV ©   (2004-10-26 13:09) [5]

Вот. Ещё одна проблема overload.. :(


 
CHES ©   (2004-10-26 13:10) [6]

Неа

var v1,v2:variant;
begin
//F1(TChild);
v1:=3.66;
v2:=12123.54;
ShowMessage(VarToStr(Min(real(v1),v2)));
end;


 
tria   (2004-10-26 13:12) [7]

Да. В исходниках первое описание идет Min(const A, B: Integer): Integer;
Выходит, перед использованием функций надо проверять, есть ли среди них перегруженная с параметрами Variant? Это ж весь юнит math надо похерить (в смысле от него отказаться). Конкретный источник ошибок.
>Ega23 ©
Если бы я знал, что там будут за данные... Может быть и currency, тогда что делать?


 
Ega23 ©   (2004-10-26 13:13) [8]

CHES ©   (26.10.04 13:10) [6]

Почему real?


 
tria   (2004-10-26 13:15) [9]

Ответ заменить на If then else не предлагать. Я уже сделал. Но тока перед клиентом стыдно и за державу обидно :(


 
Ega23 ©   (2004-10-26 13:15) [10]

Currenсy<>Float ????


 
tria   (2004-10-26 13:19) [11]

Канечна. Currenсy по природе целый тип. По значению - дробный, с четырьмя знаками после запятой. Не содержит ошибок округления.


 
Ega23 ©   (2004-10-26 13:20) [12]

ДА ЧТО ТЫ ГОВОРИШЬ!

Currency is a fixed-point data type that minimizes rounding errors in monetary calculations. It is stored as a scaled 64-bit integer with the four least-significant digits implicitly representing decimal places. When mixed with other real types in assignments and expressions, Currency values are automatically divided or multiplied by 10000.


 
CHES ©   (2004-10-26 13:23) [13]

> Ega23 Почему real?

Потому что типа float нет. Сам проверь, твой пример не скомпилируется


 
clickmaker ©   (2004-10-26 13:25) [14]


> [13] CHES ©   (26.10.04 13:23)
> > Ega23 Почему real?
>
> Потому что типа float нет. Сам проверь, твой пример не скомпилируется

есть double


 
tria   (2004-10-26 13:27) [15]

>EGA23
Пример:
  c:currency;
  f:double;
begin
 c:=0.2;
 f:=0.2;
 If c<>f Then ShowMessage("111");


 
Defunct ©   (2004-10-26 13:31) [16]

tria   (26.10.04 13:12) [7]

Напиши свою функцию, для работы с Variant.
Не так уж и сложно.

PS: я вообще никогда не пользовался стандартной min/max, написал один раз свою, там кода блин, аж 2 строчки. Ну для Variant будет возможно 6 строк с учетом Try-Except-End.


 
CHES ©   (2004-10-26 13:31) [17]

> clickmaker ©   (26.10.04 13:25) [14]

Ясно дело. А еще есть extended, single и другие вещественные типы и работать будет с любым из них. Но float - нет такого типа.


 
Ega23 ©   (2004-10-26 13:33) [18]

CHES ©   (26.10.04 13:31) [17]

Ну ошибся с T-SQL, там только float. Ты же понял прекрасно, о чём речь...



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

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.03 c
14-1097955597
Nix
2004-10-16 23:39
2004.11.07
Как узнать величину перемещения курсора мыши?


1-1098275631
СержК
2004-10-20 16:33
2004.11.07
Как отследить из приложения - что на машине запущен Excel?


3-1097130177
Black
2004-10-07 10:22
2004.11.07
Как создать новую таблицу в базе данных Access?


8-1091708249
Dima_Delphi
2004-08-05 16:17
2004.11.07
Как изменять масштаб текста???


14-1097830299
syte_ser78
2004-10-15 12:51
2004.11.07
Ваше мнение?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский