PASAR NÚMEROS REALES A NÚMEROS ENTEROS
function Trunc( X: Extended ): Int64;
Esta función convierte un tipo Extended al tipo entero Int64 truncando los decimales (sin redondeos). Por ejemplo:
Trunc( 1234.5678 ) devuelve 1234
function Round( X: Extended ): Int64;
Esta función convierte un tipo Extended al tipo entero Int64 pero redondeando la parte entera según la parte decimal. Por ejemplo:
Round( 1234.5678 ) devuelve 1235
Round( 1234.4678 ) devuelve 1234
function Ceil( const X: Extended ): Integer;
Convierte un valor Extended en Integer redondeando al número entero que este mas próximo hacia arriba. Por ejemplo:
Ceil( 1234.5678 ) devuelve 1235
Ceil( 1234.4678 ) devuelve 1235
Ceil( 1235.5678 ) devuelve 1236
Ceil( 1235.4678 ) devuelve 1236
function Floor( const X: Extended ): Integer;
Convierte un valor Extended en Integer redondeando al número entero que este más próximo hacia abajo. Por ejemplo:
Floor( 1234.5678 ) devuelve 1234
Floor( 1234.4678 ) devuelve 1234
Floor( 1235.5678 ) devuelve 1235
Floor( 1235.4678 ) devuelve 1235
También tenemos una función un poco rara para extraer el exponente y la mantisa de un número real Extended:
procedure FloatToDecimal( var DecVal: TFloatRec; const Value; ValueType: TFloatValue; Precision, Decimals: Integer );
Convierte un número Extented o Currency a formato decimal guardándolo en la siguiente estructura de datos:
type TFloatRec = record
Exponent: Smallint;
Negative: Boolean;
Digits: array[0..20] of Char;
end;
Por ejemplo:
var
e: Extended;
RegistroFloat: TFloatRec;
begin
e := 1234.5678;
FloatToDecimal( RegistroFloat, e, fvExtended, 10, 4 );
end;
Al ejecutarlo da los siguientes valores:
RegistroFloat.Digits = 12345678
RegistroFloat.Negative = False
RegistroFloat.Exponent = 4
TRUNCANDO NÚMEROS REALES
function Int( X: Extended ): Extended;
Aunque esta función devuelve sólo la parte entera de un valor Extended, el valor devuelto sigue siendo Extended. El resultado es similar a la función Trunc (sin redondeos). Por ejemplo:
Int( 1234.5678 ) devuelve 1234
Int( 1234.4678 ) devuelve 1234
function Frac( X: Extended ): Extended;
Devuelve la parte fraccionaria de un valor Extended. Por ejemplo:
Frac( 1234.4678 ) devuelve 0.5678
CONVIRTIENDO VALORES EXTENDED Y CURRENCY
Como vimos anteriormente, el tipo Currency no es un auténtico formato en punto flotante sino un entero de punto fijo con 4 decimales como máximo, es decir, los valores Currency se almacenan como un entero multiplicado por 10000. Veamos de que funciones disponemos para convertir de un tipo a otro:
function FloatToCurr( const Value: Extended ): Currency;
Esta función convierte de tipo Extended a Currency. Por ejemplo:
FloatToCurr( 1234.5678 ) devuelve 1234.5678 (de tipo Currency)
FloatToCurr( 123.456789 ) devuelve 123.4568 (de tipo Currency y perdemos 2 decimales)
function TryFloatToCurr( const Value: Extended; out AResult: Currency ): Boolean;
Esta función es similar a FloatToCurr pero sólo comprueba si se puede convertir a Currency. El procedimiento sería:
var
c: Currency;
begin
if TryFloatToCurr( 123.456789, c ) then
ShowMessage( CurrToStr( c ) );
end;
CONVIRTIENDO VALORES ENTEROS A VALORES REALES
Se puede convertir un valor entero a real convirtiendo la variable directamente:
var
i: Integer;
r: Real;
begin
i := 1234;
r := i; // realiza el casting automáticamente
ShowMessage( FloatToStr( r ) ); // muestra 1234
end;
Esto no ocurre en todos los casos pero es cuestión de probar (aunque es recomendable utilizar los tipos Variant para esa labor).
Pruebas realizadas en Delphi 7.
No hay comentarios:
Publicar un comentario