![]() |
Integer y extended
Buenas tengo una tquery donde despues de hacer la sql recojo los datos para operar con ellos de esta forma
Lo que hago es recoger varios valores que me ha devuelto la sql y multiplicarlos y dividirlos tal cual , he probado con extended porque con integer la última linea que divido /100 no me la pilla. La cuestión es que con extended me hace el calculo , pero claro despues quiero pasarlo a integer y no veo la forma. gracias , radge |
hola, para dividir enteros, se usa div (3 div 2). para redondear a enteros desde un float, puedes usar round, int, integer, trunc o floor.
|
Cita:
¿Es necesario la parte entera?¿O por el contrario, es más adecuado redondear?;) Saludos, |
cierto. El floor, de la misma manera, redondea para abajo. El int lo puse pero revisando la ayuda veo que devuelve un extended tambien asi que no creo que te sirva, y el integer es un typecast.
|
Disculpar mi inexperiencia en el mundo de delphi.
Yo lo que quiero obtener es un float ( es decir necesito los decimales) sin redondear. Tal cual me hace la operación correctamente
Pero claro despues no se como recoger ese valor del extended... yo necesitaria devolver un integer para insertar lo a la sql. Despues otra cosa , esto lo tengo en un bucle con lo cual me gustaria ir sumando todos los valores de total_linea , pero si es extended no se como. SumaTotal := SumaTotal + TotalLinea; (<== esta ultima del tipo extended) gracias , radge |
bueno, un entero no puede tener decimales...
|
Se pueden comparar tambien decimales en las consultas de sql, quiza deberias tirar por alli, en vez de intentar poner en ella un entero.
|
A ver pongamos un ejemplo
precio : 50,50 cantidad : 10 descuento : 50% Yo hago lo siguiente : 50,50 * 10 - ( 50,50 * 10 * (50 / 100) Total = 252.5 Yo esto tal como lo hago lo guardo en un "extended" el problema es despues que no veo como transformar ese numero para ponerlo en el sql , yo luego quiero insertarlo en la sql. |
bueno, este numero 252.5 es un decimal, el cual su parte entera es 252. Contra que lo quieres comparar?
|
Cita:
|
A ver tal como dices si tengo varios registros como estos
100,10 100,10 100,10 El total es 300,30 , yo necesito eso 300,30 con todos sus decimales Otra opción que he encontrado es usar floattostr FloatToStr(SumaTotalLinea) , lo cual me devuelve 300,30. Ahora solo me falta substituir la "," por el ".". |
Si necesitas los decimales, entonces no debes usar el integer para nada.
Puedes usar
o bien
|
Hola ! la variable que recibira el resultado debe ser de tipo real o variant
|
Ahora tengo otra duda ,
Alb_Importe : string; ImportResta , SumaTotalLinea, : extended; Recibo de otro formulario un "String" llamado "ALB_importe"
Es decir yo recibo un string , intento pasarlo a integer y entonces darle formato para poder hacer la resta gracias , radge |
strtoint te deberia servir, si es entero, sino strtofloat
|
He visto que estás empleando el tipo extended en vez de real.¿Es necesario que emplees dicho tipo? Puede que con el real te baste y sobre.
Si se trata de datos monetarios, por lo general es preferible tratar con el tipo Currency, que supuestamente ha sido diseñado para tener una buena precisión es los cálculos monetarios.;) Saludos, |
Recibir como string un número pienso que resulta arriesgado :eek: ... de preferencia usar edición con mascara como TMaskEdit.
En lugar de usar StrToInt o StrToFloat para convertir ALB_importe, mejor usar StrToIntDef o StrToFloatDef, Ej.: StrToFloatDef(ALB_importe,0); Esto garantiza que si ALB_importe no es un numero siempre se regresa 0.00 como importe ... Las funciones que no tienen Def generan la excepcion EConvertError. |
La franja horaria es GMT +2. Ahora son las 10:03:41. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi