![]() |
Redondeos y no redondeos
Buenos días,
Tengo problemas graves con los float, vereis si tengo el valor 7,636 almacenado en un float y lo quiero convertir a un float pero que me coga los dos primeros decimales,es decir, que quedase 7,63 SIN REDONDEAR como lo hago????? Otra cosa, porque cuando una string tengo "7,63" y pongo StrToFloat(7,63) el valor que me devuelve es 7,63000000145!!!! Como puedo solucionar estos casos? |
Cita:
Deberías buscar otro tipo de datos que no sea de coma flotante. Es más, no se debería usar NUNCA los datos de coma flotante para operaciones que necesiten precisión de x decimales, y usar tipos de datos de coma fija. En Java pasa exactamente lo mismo, y la solución que se da siempre es no usar variables float, y usar la clase BigDecimal (que es una p*tada, porque en Java no se pueden sobrecargar los operadores, y en vez de hacer a=a+b-c se hacen cosas tan bonitas como a.add(b).subtract(c)). |
¿Y pasándolo a String mediante FormatFloat y después haciendo un StrToFloat?
valor = 7,636 StrToFloat(FormatFloat("0.00", valor)) no recuerdo si te lo redondea. Saludos. |
Hola,
en la unidad math hay varias funciones de redondedo: Round, Ceil, Trunc, Floor, etc...cada una con matices diferentes segun lo que necesites (creo que este mismo necesitas Floor). Tambien puedes multiplicar por 100, redondear, y luego dividir por 100 otra vez, quedandote tansolo los decimales que necesitas. No se, creo que el problema es bastante solucionable si le pones un poco de empeño. En cuanto a la representacion, FormatFloat como dice jcosta o bien usar Format('%0.2f',[numero]). A ver si te sirve, saludos. |
FormatFloat redondea
FormatFloat redondea :(, en c++ builder que recomendais pues para trabajar con decimales?
|
Código:
#include <math.h > Código:
float F, f = 7.636; |
Mira también este hilo.
|
La franja horaria es GMT +2. Ahora son las 21:59:36. |
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