之前项目里面需求是将BigDecimal转换成字符串并且去除小数后面的零,小数点最长不能超过6位,开始我的代码是这么写的
String.valueOf(materialVo.getUnitPrice().divide(materialVo.getPriceUnit(),6,BigDecimal.ROUND_HALF_UP).stripTrailingZeros())
经过测试试了一些数据是没问题的,但是等上线之后就发现,生成的文档里面的数据全部变成了科学计数法!
查代码发现是由于使用stripTrailingZeros方法直接string.valueOf导致的,要改成使用toPlainString方法
materialVo.getUnitPrice().divide(materialVo.getPriceUnit(),6,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()