BigDecimal在前端获取数据的时候精度丢失,BigDecimal相关的使用场景和常用的方法


解决方法把它转换成String类型

使用场景

一般使用在金额比较大的字段中,不想要精度丢失,计算金额要求很准确。

1.可以在它的实现类属性上面加上这个注解 (防止小数点后面的数没有了)

 @JsonSerialize(using= ToStringSerializer.class)

2 细节:当这个属性为BigDecimal类型,可以通过这个方法进行转换为Integer类型

 int rulcon = vo.getRulcon().intValue();
2.1 顺便它还有相关的一些其他的方法
new BigDecimal(2.0000).divide()    //除法
.mutipyly(30)  //乘法
.add(6)加法
. scale()    //percision() 精度

3然后BigDecimal是不可以设置为空的,

inspectorUphold.setRuldata(null);设置不进去

  if(rulcon!=3){
            inspectorUphold.setRuldata(BigDecimal.valueOf(0));

        }
        else {

            inspectorUphold.setRuldata(vo.getRuldata());
        }

4. java在实体类中使用的是BigDecimal类型,数据库中字段可以用decimal类型,小数点可以自定义。

5. 常用的方法,要求转换为Integer类型,和小数点位数的准备

package com.batch.handler;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

public class TestMain {
    public static void main(String[] args) {
        BigDecimal bigDecimal = new BigDecimal("300");
        System.out.println(bigDecimal);
        BigDecimal bigDecimalxiaoShu = new BigDecimal("300.66666666");
        System.out.println(bigDecimalxiaoShu);
//       *  小数的BigDecimal转换为Integer报错 For input string: "0.8000000000000000444089209850062616169452667236328125"
      /* Integer integer = Integer.valueOf(bigDecimal.toString());
        System.out.println(integer);*/
//        Double aDouble = Double.valueOf(bigDecimal.toString());
//        System.out.println(aDouble);

        BigDecimal multiply = bigDecimal.multiply(new BigDecimal(100));
        System.out.println(multiply);
        int i = multiply.intValue();
        System.out.println(i);


        int i1 = bigDecimal.intValue();
        System.out.println("i1=" + i1);


        BigDecimal bigDecimal1 = new BigDecimal(1);

        Integer result = bigDecimal.multiply(bigDecimal1).intValue();
        System.out.println("result=" + result);

        BigDecimal subtract = bigDecimal1.subtract(new BigDecimal("0.3333"));
        System.out.println("intValue="+subtract.intValue());
        System.out.println("subtract---" + subtract);

        List<Integer> all = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);//全部数据
        List<Integer> part = Arrays.asList( 2, 3, 5, 6, 9);//部分数据
        List<Integer> result1 = new ArrayList<>();//取出差的数据
        result1 =  all.stream().filter(item->part.stream().allMatch(each->!item.equals(each))).collect(Collectors.toList());
        System.out.println(result1);


        List<String> strings = Arrays.asList("176662", "13245435", "17898u9");
        Iterator<String> iterator = strings.iterator();
        Object next =null;
        while (iterator.hasNext()){
            next = iterator.next();

        }
        System.out.println("next------------" + next);


    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时间指导毕业设计

觉得写的好的话可以给我打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值