金钱类型BigDecimal

在项目中你们设计金钱用的是什么类型呢?是double还是float类型呢!其实这两个都不行,给你们举个例子:

  System.out.println(0.05+0.01);
  System.out.println(1.0-0.42);
  System.out.println(4.015*100);
  System.out.println(123.3/100);

这是一个很简单的加减乘除,我们口算都能算出来的数可他出现的结果居然是
在这里插入图片描述

当然并不是每数字都是这样,这只是一个例子,为什么会造成这种现象呢,是因为我们使用的基本数据类型double精度不高,这样的精度我们是不可能用来做金钱类型的所以我们用了另一种类型BigDecimal类型。
学过java基础的都知道,他并不是基本数据类型,他是Java提供的大数字的操作类,用于高精度计算,都说他是个类,那么我们就按照类的方式用它。

1. 创建对象

  double a =1.0;
  String str= "1.0";
  BigDecimal b1 = new BigDecimal(str);
  BigDecimal b2 = new BigDecimal(a);
  BigDecimal b3=BigDecimal.valueOf(a);

由上述可知创建他有3种方法,通过构造函数的方法,还有静态方法的方式创建,其中通过double类型的构造函数创建是不推荐的,因为精度很差。

2. 加减乘除的使用方法。

这bigDecimal类型是不支持直接±*%的方式进行加减乘除进行运算的。他是直接使用英文的加减乘除,即add, substract, multiply和divide
例如:
在这里插入图片描述

3.大小的比较

两个BigDecimal值比较使用compareTo方法, 比较结果有-1, 0, 1, 分别表示小于, 等于, 大于;
例如:
在这里插入图片描述

4.设计数据库的一些坑

在设计数据库时,选择decimal类型长度是可以自定义的,另外要注意设置默认值,设置为0.00不要用默认的null,不然在运算中会带来一些不必要的麻烦

`balance` decimal(18,2) DEFAULT '0.00' COMMENT '账户余额'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值