C# 在一组值之间按比例分配(按比例分配)一个值
可能重复:C# 在一组值之间按比例分配(按比例分配)一个值,c#,math,C#,Math,可能重复: 我一直在寻找一种算法,根据一年中C#的天数来分配每月的总金额,这样所有比例的总和就等于总价值 一年内的日期范围,并给出总金额 示例: for a value 19550 and date range 9/1/2011 to 6/30/2012 September 1,929.28 October 1,993.59 November 1,929.28 December 1,993.59 January 1,993.59 February 1,864.97 - 2
我一直在寻找一种算法,根据一年中C#的天数来分配每月的总金额,这样所有比例的总和就等于总价值 一年内的日期范围,并给出总金额 示例:
for a value 19550 and date range 9/1/2011 to 6/30/2012
September 1,929.28
October 1,993.59
November 1,929.28
December 1,993.59
January 1,993.59
February 1,864.97 - 28 days
March 1,993.59 - 31 days
April 1,929.28 - 30 days
May 1,993.59
June 1,929.28
但是总数是19550.04,比总数多0.04。可能相关,所以回答:
奇怪的是,它和你的问题同名…还有瑞奇的答案: 在一定的时间段内,并不总是能够平均分配给定的数量。事实上,一个数量在给定的时间段内均匀分布是非常罕见的 在金融中,为了弥补差额,通常允许最后一个数字小于平均正常数字 例如,在您的情况下,6月份的金额应为1929.24 通常,在绘制图表时,您会跟踪金额分配。一旦你走到尽头,你就有了选择。要么允许金额更高,要么以更低的金额再支付一次
基本上,您需要更改生成每月金额的算法。在那里打勾,以确保您计算的金额仍然可用。如果不是,则取两个值中的较低值。听起来你已经有了比例分配的代码;但是你要四舍五入到最接近的一分,所以现在你所需要的就是得到你想要的确切的总数。我有两个想法:
我假设你的4美分来自四舍五入造成的损失……是否有一个通用的数学公式/算法?。如果我从每个月最高的总数中拿出1美分,看起来会更好吗?所以十月,十二月,三月,五月是1993年。58@shpop:我过去曾在摊销计划中处理过这一问题,该计划具有非常明确的算法。如果不知道你的实际使用情况,就不可能说出。你可以根据计算结果想象一个人每月收到的支票。一年的总金额应该与小数点四舍五入到2的总数完全匹配。@shpop:我实际上是在寻找确切的用例。然而,在雇佣支票的情况下,大多数公司都会额外支付一点(有时高达几美元)以保持公平。您可能只需要编写自己的代码并进行测试…谢谢。。。现在我将调整我的最后一个号码