Delphi XE2에서 System.Str로 변경되었습니다. 다음 절차 :Delphi XE2 - System.Str가 변경되었거나 손상 되었습니까?
procedure someProcedure;
var
E:double;
outString:string;
begin
E:=-1.7E+308;
Str(E:i:j, outString);
end;
는 (0x00407318에서 예외 클래스 $의 C0000005, 액세스 위반 : 주소 0x30303028의 읽기) 액세스 위반
를 발생시킵니다
'i'를 델파이 XE2에서와 'J' 어떤 정수이든간에. 이 동일한 코드는 Delphi 2010에서 제대로 작동하고 outString = '-1.7E + 0308'을 반환합니다. 유사한 코드가 TurboPower Orpheus 구성 요소 중 일부에서 사용되며 전체 IDE가 BEX 오류로 인해 충돌합니다.
이것은 Win7 64 비트 버전입니다. 어떤 아이디어?
편집 : 추가 정보
큰 음수 일 때만 발생하는 것으로 보입니다. Str은 ~ 130자를 넘을 때 깨지는 긴 문자열을 생성하는 것으로 보입니다.
참고 : 폭을 사용하는 경우 (내가 어떤 폭 = 곳)이
procedure someProcedure;
var
E:double;
outString:string;
begin
E:=-1.7E+308;
Str(E:i, outString);
end;
이것은 정밀도 오류가 아닙니다. 이것은 -1.6E117이 2 진 부동 소수점 형식으로 정확하게 표현할 수 없다는 것입니다. –
해결 방법은 아마도 0보다 작은 지 테스트하고, 부호를 부정한 다음 문자열에 '-'접두사를 붙이는 것입니다. – CodesInChaos
사실 XE2가 올바르게 작동하고 있습니다. '1.60000000000000002E + 0117'이 맞습니다. Rob Kennedy의 가장 유용한 페이지를 참조하십시오 : http://pages.cs.wisc.edu/~rkennedy/exact-float?number=-1.6e117 –