金额计算不能用doube!!!!
金额计算不能用doube!!!!
金额计算不能用doube!!!!
重要的事情讲三遍。哈,金额计算必须用BigDecimal,下面对比一下用double 跟BigDecimal的区别,这里为了方便我直接调用工具类MoneyUtil,最后再来看工具类怎么实现
1.出现科学计数法:
double d1 = 0.00000000000000001;
Log.v("zyl", "d1:"+d1);
Log.v("zyl", "d1:"+MoneyUtil.formatMoney(d1+""));
控制台输出结果:d1:1.0E-17
d1:0.00000000000000001000
2.计算金额不准确,丢失精度:
double d1 = 11540;
double d2 = 0.35;
Log.v("zyl", "result:"+(d1*d2));
Log.v("zyl", "result2:"+MoneyUtil.moneyMul(d1+"", d2+""));
控制台输出结果:
result:4038.9999999999995
result2:4039.00000000000000000000 (正确答案)
3.避免发生强转错误
这个虽然跟自己粗心有关,但实际在项目应用的时候,往往数据既需要计算,又需要展示,比如你在计算单价跟数量相乘的是,一般我们会用int 跟 double ,然后展示的时候又需要字符串。好了,此时你把它转为字符串了,但又需要你拿着刚