MoneyUtil.java 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package com.java110.utils.util;
  2. import java.math.BigDecimal;
  3. public class MoneyUtil {
  4. /**
  5. * <option value="1">{{vc.i18n('四舍五入','editFeeConfig')}}</option>
  6. <option value="3">{{vc.i18n('向上进位','editFeeConfig')}}</option>
  7. <option value="4">{{vc.i18n('向下进位','editFeeConfig')}}</option>
  8. */
  9. public static final String HALF_UP = "1";
  10. public static final String UP = "3";
  11. public static final String DOWN = "4";
  12. /**
  13. * 四舍五入
  14. * @param price
  15. * @param scale
  16. * @param decimalPlace
  17. * @return
  18. */
  19. public static double computePriceScale(double price,String scale,int decimalPlace){
  20. //todo 解决 群里反馈 进度丢失问题
  21. //todo 发现了个BUG MoneyUtil.computePriceScale 计算金额四舍五入时,精度丢失问题, new BigDecimal(String ) 就OK了, double 会出问题。 例如444.195 四舍五入变成了 44.19
  22. BigDecimal feeTotalPrice = new BigDecimal(price+"");
  23. if(DOWN.equals(scale)) {
  24. feeTotalPrice = feeTotalPrice.setScale(decimalPlace, BigDecimal.ROUND_DOWN);
  25. }else if(UP.equals(scale)){
  26. feeTotalPrice = feeTotalPrice.setScale(decimalPlace, BigDecimal.ROUND_UP);
  27. }else{
  28. feeTotalPrice = feeTotalPrice.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
  29. }
  30. return feeTotalPrice.doubleValue();
  31. }
  32. }