xe2 versiones studio gratis full embarcadero descargar delphi delphi-xe delphi-xe2

versiones - embarcadero delphi



La funciĆ³n BcdDivide se comporta de manera diferente en Delphi XE y XE2 (1)

FmtBcd.pas ha sido ampliamente revisado y reescrito en Delphi XE2. En uno de mis proyectos, tengo un caso que utiliza una operación de división en dos valores Bcd , pero las dos versiones arrojan resultados diferentes. En el peor de los casos, Delphi XE2 puede arrojar un Bcd overflow error .

Ejemplo: ejecutar el siguiente código en las aplicaciones de la consola Delphi XE2:

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.

La salida de lo anterior será:

0.333333333333333333333333333333333333333333333333333333333333333 BCD overflow

La variable C contiene un valor Bcd con 63 lugares decimales de especificidad. Realizar una segunda operación BcdMultiply en la variable C provocará un Bcd overflow error .

Sin embargo, ejecutar el mismo código en Delphi XE produce el siguiente resultado sin ningún aviso de excepción:

0.3333333333 0.11111111108888888889

¿Podría alguien sugerir un método de mejores prácticas para resolver este problema?


El código en la pregunta produce el resultado esperado en la actualización XE2 4. Tenga en cuenta que la actualización 3 produce el resultado incorrecto y, por lo tanto, claramente la corrección llegó con la actualización 4. Además, XE3 produce el resultado esperado.