【发布时间】:2011-03-25 11:43:18
【问题描述】:
在后端,我将货币值存储在 Money 类中,该类包装 BigDecimal 并将舍入设置为始终为 8 级的 Half Even。所有基本操作都可以正常工作并按预期运行。但我需要以 2 的比例向用户显示这些值,这会导致舍入错误。
例如,我在后端有这些值:
a = 109.11432
b = 9015.57069
c = 9124.68501
它们中的每一个都被格式化为 pt-BR 语言环境:
NumberFormat nf = NumberFormat.getInstance();
nf.setCurrency(Currency.getInstance(new Locale("pt","BR")));
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
String n = nf.format(valor);
return n;
然后我有
a = 109,11
b = 9.015,57
c = 9.124,69
一开始没关系。但是 c 应该是 a + b。使用实际值,这是可以保证的,但四舍五入会给我 0.01 的误差。
处理这种情况的正确方法是什么?
【问题讨论】:
-
我认为你不应该存储 109.11432,取整它,我的意思是当你去商店时,收银员会要求你支付 5,90132 美元吗? ;]
-
在我得到这些结果之前已经完成了很多操作,很多乘法、加法、除法,这导致了我展示的这些值。如果我对每个操作进行四舍五入,最终我的错误会比 1 美分大得多。我以前做过。
标签: java formatting currency