Тема: TBcd
Показать сообщение отдельно
  #4  
Старый 24.01.2014, 12:58
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Bargest
С какого в цифре 1 у него взялось две цифры?
Число 16 в 16-ричной системе счисленния будет как $10. В Precision записано 2, значит число состоит из двух цифр. В SignSpecialPlaces записано 1, значит одна из этих цифр используется для десятичной дроби. Получается, что число 1 было записано как "1,0". Вроде всё правильно, но действительно немного странно. В Delphi 7 такой странности нет - Precision=1 и SignSpecialPlaces=0, а в Delphi XE2 такая странность действительно наблюдается.

Впрочем модуль FMTBcd.pas известен своими ошибками. Например такое безобидное выражение:
Код:
  ShowMessage( VarFMTBcdCreate(20) / VarFMTBcdCreate(6) );
в Delphi 7 вызывает исключение EBcdOverflowException. Какое же здесь может быть переполнение? А Delphi XE2 уже показывает правильный результат: "3,3333333333"
Ответить с цитированием