考虑下面的四个百分比,表示为float数字:
13.626332%
47.989636%
9.596008%
28.788024%
-----------
100.000000%
Run Code Online (Sandbox Code Playgroud)
我需要将这些百分比表示为整数.如果我只是使用Math.round(),我最终总共有101%.
14 + 48 + 10 + 29 = 101
Run Code Online (Sandbox Code Playgroud)
如果我使用parseInt(),我最终总共有97%.
13 + 47 + 9 + 28 = 97
Run Code Online (Sandbox Code Playgroud)
什么是一个很好的算法来表示任意数量的百分比作为整数,同时仍然保持总计100%?
编辑:在阅读了一些评论和答案后,显然有很多方法可以解决这个问题.
在我看来,为了忠实于数字,"正确"的结果是最小化整体错误的结果,由相对于实际值引入的错误舍入量来定义:
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)
Run Code Online (Sandbox Code Playgroud)
在平局(3.33,3.33,3.33)的情况下,可以做出任意决定(例如3,4,3).