round rails float down decimals ruby rounding

ruby - rails - ¿Cómo lidiar con la suma del porcentaje redondeado no siendo 100?



ruby round down (4)

Opción 1

Si le preocupan los resultados que parecen un poco extraños para el usuario, pondría una nota a pie de página con respecto a los resultados, mencionando que los porcentajes se han redondeado y mi total no es del 100%. Podría mostrar el mensaje programáticamente solo cuando el redondeo provocó este comportamiento.

USA percentage: 43 Australia percentage: 29 Germany percentage: 29

*Percentages may not total 100 due to rounding

opcion 2

Ya que estás usando Ruby, sugeriría usar números rational . De esta manera no perderás la precisión cuando sea necesario. En lugar de la nota al pie, puede mostrar el porcentaje con los números racionales junto a él como sigue:

USA percentage: 43 (3/7) Australia percentage: 29 (2/7) Germany percentage: 29 (2/7)

Opcion 3

Incluya más posiciones decimales para que el error de redondeo sea menos grave:

USA percentage: 42.9 Australia percentage: 28.6 Germany percentage: 28.6

Esto resulta en 100.1 en lugar de 101.

Supongamos que tenemos una lista de elementos con un entero:

USA: 3 people Australia: 2 people Germany: 2 people

Si calculamos el porcentaje de cada valor con respecto a la suma de toda la lista, obtenemos:

USA: 3/(3+2+2)*100 = 42.857...% Australia: 2/(3+2+2)*100 = 28.571...% Germany: 2/(3+2+2)*100 = 28.571...%

Y si lo redondeamos, obtenemos:

USA: 43% Australia: 29% Germany: 29%

La suma 43 + 29 + 29 = 101 no es 100, y parece un poco extraño para el usuario del software. Como resolverías este problema?


Los componentes pueden no sumar los totales debido al redondeo. Estándar en informes estadísticos.

Los trucos volverán para morderte en la siguiente tabla, informe o apéndice. No puedes hacer un seguimiento de los cambios. A las personas que no leen este tipo de informes solo les parece divertido.

Oh si. No es un error de redondeo.


Puede "engañar" un poco sumando todos los resultados redondeados, pero el último y dando al último el valor de 100, la suma anterior ...

En este caso, tendrías:

USA = 43 Aus = 29 Ger = 28 (100 - (43 + 29))

Pero eso es solo un truco sucio ... Deberías seguir la solución más honesta / precisa que me dio Matt, ya que la mía parece indicar que el porcentaje de Alemania es menor que el de Australia.


Puede referirse al método de mayor resto usado en la elección: Wikipedia: Método de mayor resto

En tu caso, tienes

USA: 42.857... Australia: 28.571... Germany: 28.571...

Si tomas la parte entera, obtienes

USA: 42 Australia: 28 Germany: 28

lo que suma 98, y quieres tomar dos más. Ahora, miras las partes decimales, que son

USA: 0.857... Australia: 0.571... Germany: 0.571...

y toma los más grandes hasta que el total llegue a 100. Si tomas EE. UU., el total se convierte en 99, y quieres tomar uno más. Aquí surge el problema. Ya que te quedan con un empate de 0.571 ... entre Australia y Alemania, si tomas ambos, el total será de 101. Así que tienes dos formas de elegir:

(a) Si quiere que el total sea 100, simplemente tome Australia y no tome más:

USA: 43 Australia: 29 Germany: 28

(b) Si prefiere respetar el hecho de que Australia y Alemania están empatados, se detiene en ese punto:

USA: 43 Australia: 28 Germany: 28