如何在确保总数加1时对一组数字进行舍入

pol*_*ers 4 algorithm math jquery

我正在寻找一种方法来将一组数字舍入到最接近的有理数,同时仍保留该组的总数.

我想在可变数量的字段中分配'1'的总值,而不允许无理数.

所以说我想在三个领域分配总数.我不希望每个值都是0.33333333333333333333'.我更喜欢0.33,0.33和0.34.

我想用Jquery/javascript实现它.我有一个表单,其中动态添加字段.默认情况下,总被均匀地分布在各个领域,但我的问题是更加复杂,因为常常值将不能均等地在所有领域的共享.某些值的权重可能更高.所以如果我要改变这三个值中的一个为0.5,其他两个值将调整为0.25.

任何人都可以使用合适的算法吗?

aaa*_*aaa 7

Jon Rodriguez 方法的完美(且更简单)版本:

将所有数字向下舍入,保留余数以供以后使用。

按余数对数字进行排序,并从余数最大的数字开始,向尽可能多的四舍五入数字添加 1 个单位,以使它们的总和达到所需值。


Alc*_*ive 6

不完美,但写得容易:

  1. 将每个数字舍入到最接近的可接受值.当你走,跟踪其数您可以通过量最大向上圆润哪个号码的最大数量向下取整.
  2. 把数字加起来.
  3. 从1减去这个总和.
  4. 如果差异为负数,请将其添加到向上舍入的数字中.如果差异为正,请将其添加到向下舍入的数字最多.

  • 步骤2中的总和实际上可以从1乘以多于一位的最后位数,在这种情况下,正确的做法是将每个顶部*n*错误的值校正一位数最后的地方,不是全部放在最前面的1. (2认同)