ToB企服应用市场:ToB评测及商务社交产业平台

标题: Bigdecimal使用 [打印本页]

作者: 我可以不吃啊    时间: 2023-5-15 09:50
标题: Bigdecimal使用
1.Bigdecimal返回数据小数后0自动被删除的问题
  1. import com.fasterxml.jackson.core.JsonGenerator;
  2. import com.fasterxml.jackson.databind.JsonSerializer;
  3. import com.fasterxml.jackson.databind.SerializerProvider;
  4. import java.io.IOException;
  5. import java.math.BigDecimal;
  6. import java.math.RoundingMode;
  7. public class BigDecimalSerialize  extends JsonSerializer<BigDecimal> {
  8.     @Override
  9.     public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
  10.         if (null != bigDecimal) {
  11.             jsonGenerator.writeString(bigDecimal.setScale(BigDecimal.ROUND_CEILING, RoundingMode.HALF_DOWN).toPlainString() );
  12.         } else {
  13.             jsonGenerator.writeString(BigDecimal.ZERO.toPlainString());
  14.         }
  15.     }
  16. }
复制代码
在需要处理的字段上使用
  1. @JsonSerialize(using = BigDecimalSerialize.class)
  2.     private BigDecimal amount;
复制代码
2.BigDecimal格式化保留2为小数,不足则补0
  1. public class NumberFormat {
  2.     public static void main(String[] s){
  3.         System.out.println(formatToNumber(new BigDecimal("3.435")));
  4.         System.out.println(formatToNumber(new BigDecimal(0)));
  5.         System.out.println(formatToNumber(new BigDecimal("0.00")));
  6.         System.out.println(formatToNumber(new BigDecimal("0.001")));
  7.         System.out.println(formatToNumber(new BigDecimal("0.006")));
  8.         System.out.println(formatToNumber(new BigDecimal("0.206")));
  9.     }
  10.     /**
  11.      * @desc 1.0~1之间的BigDecimal小数,格式化后失去前面的0,则前面直接加上0。
  12.      * 2.传入的参数等于0,则直接返回字符串"0.00"
  13.      * 3.大于1的小数,直接格式化返回字符串
  14.      * @param obj传入的小数
  15.      * @return
  16.      */
  17.     public static String formatToNumber(BigDecimal obj) {
  18.         DecimalFormat df = new DecimalFormat("#.00");
  19.         if(obj.compareTo(BigDecimal.ZERO)==0) {
  20.             return "0.00";
  21.         }else if(obj.compareTo(BigDecimal.ZERO)>0&&obj.compareTo(new BigDecimal(1))<0){
  22.             return "0"+df.format(obj).toString();
  23.         }else {
  24.             return df.format(obj).toString();
  25.         }
  26.     }
  27. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4