FmtBcd.pas
a été largement révisée réécrit en Delphi XE2. Dans un de mes projets, j'ai un cas qui utilise une opération de division sur les deux Bcd
valeurs, mais les deux versions de donner des résultats différents. Dans le pire des cas, le Delphi XE2 peut jeter un Bcd overflow error
.
Exemple: en Exécutant le code suivant dans Delphi XE2 console apps:
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.
Sortie de la ci-dessus sera:
0.333333333333333333333333333333333333333333333333333333333333333
BCD overflow
La variable C
contient une Valeur Bcd avec 63 décimales de la spécificité. Effectuer un deuxième BcdMultiply
de l'opération sur la variable C
entraînera une Bcd overflow error
.
Cependant, pour exécuter le même code en Delphi XE donne le résultat suivant sans aucune exception, l'invite suivante:
0.3333333333
0.11111111108888888889
Quelqu'un pourrait s'il vous plaît suggérer une bonne pratique de la méthode pour résoudre ce problème?