FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola a todos
Aunque ya está resuelto, solo quiero comentar otra forma de llegar al mismo resultado. Existe la función SetRoundMode en la unidad Math. Esto es lo que pone la ayuda: Cita:
Saludos |
#2
|
||||
|
||||
Hay tantas formas de hacer una misma cosa... cada uno tiene su método/código/truco que al final llevan a la solución. Depende de la imaginación (y conocimientos) de cada uno para lograrlo
|
#3
|
||||
|
||||
muchas gracias a todos,
sus respuestas han sido certera. haber como finalizo este hilo
__________________
Enseñar es la virtud de un sabio. |
#4
|
|||
|
|||
Hola a todos/as.
El tema del redondeo me ha preocupado en varias ocasiones. El problema que tengo es cuando aparece un valor como 0.75444448 y lo quieres redondear a 3 decimales. Lo normal en todas las funciones que he visto (incluidas las que he revisado en este hilo) es que, para redondear a 3 decimales, se utilizan 4 decimales y, en este ejemplo (el valor 0.75444448), el redondeo daría 0.754 . Lo que es muy correcto, pero que no aprovecha la totalidad de decimales disponibles. Si se aprovecharan todos los decimales para redondear, el valor final debería dar 0.755 . Todo ello redondeando con:
Como el tema no se resuelve en las funciones de otras personas que he visto, me he animado a hacer una función en la que se indique lo que es normal, el valor decimal y el número de decimales a los cuales hay que redondear; pero añadiendo otro parámetro: el número de decimales desde el que se empieza a redondear de forma decreciente. En el ejemplo, el valor 9.97444756, se redondea a 3 decimales y se empieza a calcular el redondeo desde los 7 decimales (luego se hará con 6, luego con 5, ... hasta que se llegue a 3). He utilizado recursión y es de la primeras veces que lo hago; así que puede haber algún error, aunque las pruebas que hice salieron bien. Este es el código:
Lo incluyo por si esto le es útil a alguien. Saludos. |
#5
|
||||
|
||||
Cita:
0.75444448 El 4 en negrita es el número a redondear. El 4 subrayado es el dígito a evaluar con el modo de redondeo. Dependiendo del modo se verá afectado hacia arriba, abajo, trunca, etc. Fuera del modo, todo se resume a 3 posibilidades para ese 4: Se "convierte" en 3, 4 o 5. Así es que se aplica el redondeo. La última cifra significativa de interés al redondeo se ve afectada por la siguiente. Cita:
Cita:
Recuerda volver al modo de redondeo anterior, de otro modo todos tus cálculos se verán afectados (inflados) y el error tras unas cuantas operaciones será mayor del que te esperas. Cita:
De ser así, disculpame pero creo que no es una buena idea, porque de ese modo se está incrementando el error tras cada avance. Todo comienza con un error de 0.5 ulp, después de moverse al nuevo dígito será de un máximo de 0.5 + 10, luego 0.5 + 10 + 100... y así se irá propagando hasta llegar al dígito en cuestión. Esto en términos absolutos. Imagínate que luego a ese resultado debes aplicar la siguiente operación: Valor2 = Valor1 x 10000; Hagamos de cuenta, como dices que debería ser 0.755 y no 0.745. Si hacemos dicha multiplicación se obtiene 7550 y 7450. La diferencia entre ambos es de 100, ahora multiplícalo por 100000... 75500 y 74500, diferencia: 1000. Cuanto más sigas avanzando, más alta será la diferencia, los cálculos se harán más erróneos. No he probado tu código. Pero si hace lo que me temo, creo que no es buen método de redondeo. Saludos, |
#6
|
||||
|
||||
Estoy con Delphius, el modo propuesto por el amigo rrf está bien como ejercicio, pero no es práctico ni vale para el "mundo real", ya me imagino las caras de los clientes protestando por esos "redondeos" tan "cuadrados"
Creo que la función que he propuesto sí es válida para "la vida real": function Redondeo (valor: Double; decimales: integer = 0): Double; Indicas el valor a "redondear" y el número de decimales al que quieres el redondeo. |
#7
|
||||
|
||||
Hola.
Recién leo el hilo nuevamente... Y coincido cien por ciento con Delphius. Un error que por defecto o exceso ajustemos en diezmilésimas, podrían convertirse en centesimas, por ejemplo. Saludos. Última edición por ecfisa fecha: 14-09-2010 a las 18:37:09. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como redondear un numero en un procedimiento en Firebird | Gaby123 | SQL | 0 | 26-02-2007 18:25:26 |
Cómo Redondear a 4 decimales un campo de tipo Numérico | vick | Conexión con bases de datos | 1 | 11-10-2005 01:04:23 |
Funcio para obtener las decimas de segundo | enzo | Varios | 2 | 13-05-2005 01:06:11 |
Mostrar un Float como un hh:mm:ss | rjsitruiz | Impresión | 2 | 04-07-2004 14:25:29 |
|