Python中按特定规则对除法取整:让靠前人员承担更多金额
解决方法
要实现千位取整且靠前人员承担更多、总金额完全匹配的需求,你可以按以下思路编写代码:
核心逻辑
把总金额先转换成千位单位的整数,分配这个整数时让前N个人多拿1(N是总金额除以人数的余数),最后再转回原单位。这样既保证靠前的人金额更高,又能确保总和与原总金额完全一致。
代码实现
total = 245000 num_people = 3 step = 1000 # 千位取整的步长 # 将总金额转换为千位单位的整数 total_k = total // step # 计算每人的基础千位金额和余数 base_k = total_k // num_people remainder = total_k % num_people # 分配金额:前remainder个人多拿1000 amounts = [] for i in range(num_people): if i < remainder: amounts.append((base_k + 1) * step) else: amounts.append(base_k * step) # 输出结果 for idx, amount in enumerate(amounts, 1): print(f"Person{idx} = {amount}")
运行结果
Person1 = 82000 Person2 = 82000 Person3 = 81000
为什么原代码不行?
你原来用round(total / 3)得到的是82000,但三个82000的总和是246000,比原总金额多了1000。这是因为round只是对单个数值四舍五入,没有考虑整体总和的匹配,而上面的方法通过余数分配解决了这个问题。
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

