![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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? |
#2
|
|||
|
|||
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)). |
#3
|
|||
|
|||
¿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. |
#4
|
|||
|
|||
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. Última edición por coso fecha: 11-06-2010 a las 12:11:13. |
#5
|
|||
|
|||
FormatFloat redondea
FormatFloat redondea
![]() |
#6
|
||||
|
||||
Código:
#include <math.h > float NDecimales(float f, int decimales) { return floor(f*pow(10, decimales))/pow(10, decimales); } Código:
float F, f = 7.636; F = NDecimales(f, 2); |
#7
|
||||
|
||||
Mira también este hilo.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con redondeos en campos Money | river_1 | SQL | 3 | 16-06-2010 01:59:34 |
Redondeos extraños en Delphi con Currency y Firebird 2.0 | Meinard | Firebird e Interbase | 6 | 07-03-2007 21:36:30 |
Redondeos con Firebird 2.0 | Jose_T | Firebird e Interbase | 12 | 19-01-2007 19:57:02 |
problemas con float y redondeos | wonder boy | Firebird e Interbase | 17 | 27-12-2005 20:59:06 |
Problemas con Redondeos | AGAG4 | Varios | 4 | 14-11-2005 23:38:44 |
![]() |
|