Что-то изменилось с System.Str в Delphi XE2. Следующая процедура:
procedure someProcedure;
var
E:double;
outString:string;
begin
E:=-1.7E+308;
Str(E:i:j, outString);
end;
Вызывает нарушение прав доступа
(класс исключений $ C0000005, нарушение доступа по адресу 0x00407318: чтение адреса 0x30303028)
в Delphi XE2, где «i» и «j» - любые целые числа. Этот же код прекрасно работает в Delphi 2010 и возвращает outString = '-1.7E + 0308'. Аналогичный код используется в некоторых компонентах TurboPower Orpheus, и он вызывает сбой всей IDE при ошибке BEX.
Это в Win7 64-bit. Есть идеи?
Редактировать: дополнительная информация
Это, кажется, происходит только с большими отрицательными числами. Кажется, что Str генерирует длинные строки, которые ломаются, когда они превышают ~ 130 символов.
Примечание: это не нарушается при использовании только ширины (где i = некоторая ширина)
procedure someProcedure;
var
E:double;
outString:string;
begin
E:=-1.7E+308;
Str(E:i, outString);
end;