PDA

Ver la Versión Completa : Número con decimales


blueicaro
31-10-2007, 19:22:13
HOla Tengo un programa dónde tengo una variables declarada así:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)Type TOrient = Record Q1 : LongInt; Q2 : LongInt; Q3 : LongInt; Qu : LongInt;


Para que almacenar números de hasta 6 decimales.

Los números los saco de un fichero de texto, que contiene los números así:
2124.58

Leo el fichero de texto, y el valor lo pongo en un String

Mi problema es al convertirlo, ya que siempre me da cero.
Uso una línea como esta:

MiOrient.Q1 := StrToIntDef(StBloque,0)


¿que estoy haciendo mal?

Gracias
/BLueIcaro

ContraVeneno
31-10-2007, 22:39:29
¿porque utilizas variables tipo entero para leer valores con decimales?

La función StrToIntDef convierte una cadena a un entero y el segundo parámetro es el valor que se tomará en caso de haber un error.

Supongo que al querer cambiar un valor con decimales a un tipo entero, te genera un error (obvio) y entonces toma el 0 que le pasas como segundo parámetro.

blueicaro
01-11-2007, 01:00:40
Entonces que función debo usar?
/BlueIcaro

HenryAraniva
01-11-2007, 01:09:58
si lo que quieres es que te queden enteros los decimales podrias usar la funcion round() o trunc(), la primera te redondea un numero decimal a entero por ej. 4.6 = 5, el segundo corta los decimales ej.: 4.6 = 4

HenryAraniva
01-11-2007, 01:14:35
se me olvidaba, antes debes convertir la cadena con la función val(cadena,dato,x)
"cadena" es la variable donde almacenas el dato del fichero que lees, "dato" es una variable de tipo real donde se almacenará el resultado de la conversión y "x" es una variable de tipo integer, que es utilizada por la función val. Despues de esto podras utilizar la función MiOrient.Q1 := trunc(dato) o MiOrient.Q1 := round(dato)

Lepe
01-11-2007, 11:16:40
La función a usar es StrToFloat (mira en la ayuda, es posible que también exista StrToFloatDef o TryStrToFloat, no las he usado, pero existen sus homónomas para integer).

El tipo de datos, en lugar de ser LongInt (entero largo sin decimales), debería ser Extended (real con decimales).

Saludos