Examiner les quatre pourcentages ci-dessous, sous la forme d' float
numéros de:
13.626332%
47.989636%
9.596008%
28.788024%
-----------
100.000000%
J'ai besoin de représenter ces pourcentages que des nombres entiers. Si j'utilise simplement Math.round()
, je me retrouve avec un total de 101%.
14 + 48 + 10 + 29 = 101
Si j'utilise parseInt()
, je me retrouve avec un total de 97%.
13 + 47 + 9 + 28 = 97
Qu'est ce qu'un bon algorithme pour représenter n'importe quel nombre de pourcentages que des nombres entiers, tout en conservant un total de 100%?
Edit: Après avoir lu certains des commentaires et des réponses, il y a clairement beaucoup de façons d'aller sur la résolution de ce.
Dans mon esprit, pour rester fidèle à l'un des numéros, le "bon" résultat c'est celui qui minimise l'erreur globale, définie par la façon dont beaucoup d'erreur d'arrondi introduirait par rapport à la valeur réelle:
value rounded error decision
----------------------------------------------------
13.626332 14 2.7% round up (14)
47.989636 48 0.0% round up (48)
9.596008 10 4.0% don't round up (9)
28.788024 29 2.7% round up (29)
En cas d'égalité (3.33, 3.33, 3.33) une décision arbitraire peut être fait (par exemple, 3, 4, 3).