BcdDivide işlevi farklı Delphi XE ve XE2 davranması
FmtBcd.pas
yoğun Delphi XE2 yeniden düzenlendi. Projelerimden birinde, Bcd
iki değer bir bölme işlemi kullanan bir dava var, ama iki sürümleri farklı sonuçlar. En kötü durumda, Delphi XE2, Bcd overflow error
atabilir.
Örnek: Delphi kod aşağıdaki XE2 uygulamalar konsol: Koşu
var A, B, C, D: TBcd;
begin
A := StrToBcd('1');
B := StrToBcd('3');
BcdDivide(A, B, C);
WriteLn(BcdToStr(C));
try
BcdMultiply(C, C, D);
WriteLn(BcdToStr(D));
except
on E: Exception do
WriteLn(E.Message);
end;
ReadLn;
end.
Yukarıda çıkış olacaktır:
0.333333333333333333333333333333333333333333333333333333333333333
BCD overflow
8* *değişken özgüllük c ondalık basamaklı Bcd Değerini içerir. Değişken BcdMultiply
ikinci bir işlem yapmadan C
Bcd overflow error
a neden olur.
Ancak, Delphi TEKNOLOJİ aynı kodu çalıştırmak için herhangi bir özel durum istemi olmadan aşağıdaki sonucu verir:
0.3333333333
0.11111111108888888889
Herkes bu sorunu çözmek için en iyi uygulama yöntemi önerir misiniz?
CEVAP
Soru kodu XE2 beklenen güncelleme 4 çıkış üretir. Güncelleme 3 kötü çıktı üretir ve bu şekilde düzeltme update 4 ile geldi unutmayın. Ayrıca, XE3 beklenen çıktıyı üretir.
yavaş işlevi farklı nesneleri işlevler...
Boş bellek farklı bir işlevi ayrılmış?...
Nasıl (ya da ben) birden çok sütun üze...
Farklı döküm operatörü farklı Derleyic...
Üye işlevi olan bir tür için bir kavra...