海豚精灵:https://www.whhtjl.com;优课GO:https://mgo.whhtjl.com
一、乘法(精度问题) )
优科GO业务要求:购卡用户支付成功后,直接奖励30%的卡费给推广人员,保留2位小数,舍去舍去的小数前不增加数字。
打包测试; import java.math.BigDecimal; import java.math.RoundingMode; 公共类测试{ publicstaticvoidmain (字符串[ ] args ) {String money='0.1 '; //牌照费bigdecimalreallypaymoney=new bigdecimal (money ); System.out.println (结果: ' really pay money.multiply (new bigdecimal ) 0.3 ).setScale(2) 2,RoundingMode.DOWN )
zzdyx,0.1*0.3不是0.03吗? 为什么是0.02?
之后,Decimal在进行乘法运算时,将0.3进行模型变换为float,发现精度不够,值发生了变化,没能计算出理想值。
此解决方案是在初始化时将参数设置为字符串类型
修改代码并再次运行后,结果如下。
2 .除法(得出无限循环小数) ) ) ) ) )。
system.out.println (bigdecimal.one.divide ) newbigdecimal('3' ); 报告错误如下。
解决方法是在运算时设定精度,修改代码后执行。 结果如下。
好了