这是该计划。这意味着根据工作小时数,小时费率,税收预扣等计算员工的净工资。它计算正确,但双点精确格式舍入最后一个小数,丢失计算&#39准确性。
示例输入:
姓名:史密斯
本周工作时间: 10
每小时费率: 6.75
联邦税扣留: 20%
州税收: 9%
输出:
摘要
员工:史密斯
总薪酬: 67.50
联邦预扣税: 13.50
国家预扣税: 6.08
扣除总额: 19.58
净工资: 47.93
$('a.nav.icon.More').trigger('click');
}
请怜悯;我是第一年。
答案 0 :(得分:0)
格式化浮点数以便以两点精度显示时保持精度
你要求的是自相矛盾/不可能。
你说:
它计算正确,但双点精度格式舍入了最后一个小数,失去了计算的准确性。
这是正确的。浮点计算可能精确到至少10个小数点。如您所知,当您使用%.2f
调用中的printf
格式化数字时,实际上会发生精度损失(舍入)。
简单地说,你不能保持准确性"并且只用2个小数精度打印出数字。
简单的解决方案是在小数位后打印更多数字;即为号码使用不同的格式说明符。 (例如...... %.4f
会给出小数点后的4位数!)
我建议您阅读Formatter
的{{3}},其中解释了格式说明符的含义。
实际上,还有第二种方式来看待这个问题。您在此处使用double
进行计算。 double
是二进制(base-2)浮点表示。许多十进制数不能在二进制浮点中精确表示。 (出于同样的原因,1/3在十进制浮点中无法精确表示。)
在会计软件中处理此问题的正常方法是将货币值表示为整数(例如,整数个分数)或十进制浮点表示。在Java中BigDecimal
是表示十进制浮点的标准方法。它可以应付任意精度。