我目前正在编写一个C程序,其中包括生成并打印出一个摊位表,其中数字四舍五入为两位数。我到处都得到正确的数字,即:monthly_payment = principal_paid + interest_paid,除了最后一行(最后一次付款),偶尔我的结果不会加起来,而是一个一个。例如:
MonthlyPay:88.83,PrinPaid:87.96,IntPaid:0.88
当然,查看打印到6位数的结果,很容易看出为什么会发生这种情况:
MonthlyPay:88.834637,PrincPaid:87.955087,IntPaid:0.879551
处理这种情况的最佳方法是什么? 金融机构做了什么?
答案 0 :(得分:1)
不要四舍五入。仅在向最终用户显示时才取整。
此处或此处显示的值可能相差一分钱(也许,但我对此表示怀疑)。但是,如果四舍五入,您最终将要么总少付利息,要么少付本金,反之亦然。
如果您不进行四舍五入,那么您的计算将足够正确,除非您进行大量贷款,否则它们将不会产生1美分的差额。
答案 1 :(得分:0)
没有标准。
有些人说,"Once you round, use the rounded value for all further totals."
还有其他人不同意,说you should sum the unrounded values to avoid accumulated rounding error。例如,0.0666 + 0.0666 + 0.0666 + ... 15次应大约等于1.0000,但如果在求和之前将每个项舍入到2位小数,则最终为0.07 * 15 = 1.05!这就是使用非基础值的论据。你的一个接一个只有一个,因为你只有两个你要求的术语。
我认为最终你必须考虑每种方法的优缺点。谁会对舍入错误感兴趣?只是程序员?会计?顾客?它如何影响那些人?你可以发表一个清除模糊性的陈述,比如"Values displayed to 2 decimal places.",在这种情况下你根本不会对任何东西进行舍入,而只是在任何地方显示前两个小数位。