Delphi XE2 - System.Str改变/坏了吗?

J..*_*... 1 delphi delphi-xe2

在Delphi XE2中,System.Str发生了一些变化.以下程序:

procedure someProcedure;
var 
  E:double;
  outString:string;
begin
  E:=-1.7E+308;
  Str(E:i:j, outString);
end;
Run Code Online (Sandbox Code Playgroud)

引发访问冲突

(异常类$ C0000005,访问冲突0x00407318:读取地址0x30303028)

在Delphi XE2中,'i'和'j'是整数.这个相同的代码在Delphi 2010中运行正常并返回outString =' - 1.7E + 0308'.在一些TurboPower Orpheus组件中使用了类似的代码,它会导致整个IDE在BEX错误时崩溃.

这是在Win7 64位.有任何想法吗?

编辑:额外信息

这似乎只发生在负数大的情况下.Str似乎会生成长字符串,当它们超过~130个字符时会断开.

注意:当仅使用宽度(其中i =某个宽度)时,这不会中断

procedure someProcedure;
var 
  E:double;
  outString:string;
begin
  E:=-1.7E+308;
  Str(E:i, outString);
end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 7

这显然是处理大量负数的一个错误.正数处理得很好.如果您可以拦截到Str那时的呼叫,那么您可以确保只拨打Str正号码,然后为-自己添加前缀.

我已将错误提交给Quality Central:QC#103436.

  • @J ...没有精度错误.这个数字并不完全可以表示. (3认同)