对于会计程序,我需要将价格除以3,以便可以在3个月内共享
例如9€
现在这将是价格/ 3
但如果数字是10呢?
3,33€* 3 =€9.99
一分钱已经失踪。 我怎样才能使它成为3,33€,3,33€,3,34€?
答案 0 :(得分:15)
你需要向会计师询问他们在这里想要什么。这在软件开发中是一件很重要的事情:询问用户。
通常,为了稳定,您将从余额账户中减去支付的金额,并将支票放入以确保余额降至零。
在构建会计软件时,不要永远使用浮点数据类型。浮点精度会咬你。改为使用货币类型。
答案 1 :(得分:11)
您可以通过弥补差异来设置最后一个,而不是通过与其余部分相同的计算。在伪代码中:
normalMonthPrice = RoundToTwoPlaces(totalPrice / months);
lastMonthPrice = totalPrice - (normalMonthPrice * (months - 1));
答案 2 :(得分:5)
正如芭丝谢芭所说,先问问你的用户。
这是我在这种情况下经常使用的技术。这种方法将确保最均匀的分布,向上偏向末端。例如,如果您致电DivvyUp(101, 3)
,则会获得33.66, 33.67, 33.67
。请注意,差异不仅仅是在最后弥补。相反,每个值都是根据剩下的内容计算的,而不是从开始时计算的。
public static double[] DivvyUp(double total, uint count)
{
var parts = new double[count];
for (var i = 0; i < count; ++i)
{
var part = Math.Truncate((100d * total) / (count - i)) / 100d;
parts[i] = part;
total -= part;
}
return parts;
}
答案 3 :(得分:3)
恭喜你,你已经发现为什么计算世界不像“把数学放在它上面”那么简单 -
最简单的解决方案是除以3,舍入到小数点后两位,并在前两个月使用该值,其余时间使用original - 2 * perMonth
。