我试图将一个数字分成多个部分,以便各部分的总和等于输入数字。
如果我有 3.99 并且需要分成两部分,则预期输出为 2 和 1.99 (2+1.99=3.99)
如果我需要将 3.99 分成 3 部分,则预期输出为 1.3、1.3 和 1.39 (1.3+1.3+1.39=3.99)
对于第一个示例,我能够输出 2.99 和 1,对于第二个示例,我能够输出 1.99、1 和 1。然而,这两种情况的结果都与预期产出相差甚远。
我需要将邮政费用分成单独的行项目。结果可以等分或不等分,同时确保不同部分的总和等于输入数字。
以下是一些其他示例:
3.99 divided in 3 parts: 1.33, 1.33, 1.33
3.98 divided in 3 parts: 1.33, 1.33, 1.32
3.97 divided in 3 parts: 1.32, 1.32, 1.33
3.96 divided in 3 parts: 1.32, 1.32, 1.32
3.95 divided in 3 parts: 1.32, 1.32, 1.31
我用你提供的值进行了测试。可能需要一些调整:
static IEnumerable<decimal> SplitValue2(decimal value, int count)
{
if (count <= 0) throw new ArgumentException("count must be greater than zero.", "count");
var result = new decimal[count];
decimal runningTotal = 0M;
for (int i = 0; i < count; i++)
{
var remainder = value - runningTotal;
var share = remainder > 0M ? Math.Max(Math.Round(remainder / ((decimal)(count - i)), 2), .01M) : 0M;
result[i] = share;
runningTotal += share;
}
if (runningTotal < value) result[count - 1] += value - runningTotal;
return result;
}
这假设您传入一个小数点后 2 位精度的值。如果您通过了 3.999,您将不会得到正确的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)