JAVA:货币金额类型、精确小数类型数值的定义BigDecimal和基本运算操作

1.精确小数类型需要用BigDecimal类型

在JAVA中有8种基本数据类型(boolean, byte, short, int, long, float, double, char),其中float和double都是浮点型,但平常我们需要表示货币金额或小数类型的数值时,不能用这两种类型,因为浮点型的精确范围是不适用于日常的精确小数计算。

我们需要使用的类型是java.math.BigDecimal类型。

2.创建对象

使用BigDecimal(String val)的构造方法创建对象

如BigDecimal numA=new BigDecimal("0.6");,

尽量不要用参数为float或double的BigDecimal创建对象,如BigDecimal numA=new BigDecimal(0.6);

因为使用参数为float或double的BigDecimal创建对象会丢失精度,如

BigDecimal bdTest = new BigDecimal(1.745);

BigDecimal bdTest1 = new BigDecimal(0.745);

bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);

bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println("bdTest:" + bdTest); // 1.75

System.out.println("bdTest1:" + bdTest1); // 0.74

3.数值计算

BigDecimal 类型不能用 +, -, *, / 来运算,需要用函数,如下:

BigDecimal numA=new BigDecimal("0.6");

BigDecimal numB=new BigDecimal("0.12");

//加法

System.out.println(numA.add(numB));//结果0.72

//减法

System.out.println(numA.subtract(numB));//结果0.48

//乘法

System.out.println(numA.multiply(numB));//结果0.072

//除法

System.out.println(numA.divide(numB));//结果5

注意,如果除法结果不是整数会报错,此时需要获取保留小数,使用函数为:

divide(BigDecimal divisor, int scale, int roundingMode)

divisor是除数,scale是精确度,roundingMode是结果的取值方式(如BigDecimal.ROUND_HALF_UP)。

例如 numA.divide(numB,2,RoundingMode.HALF_UP)

3.比较大小

BigDecimal 类型不能用 >,< 来运算,需要用compareTo函数,返回值表示为0:相等,1:大于,-1:小于

如下:

BigDecimal numA=new BigDecimal("0.6");

BigDecimal numB=new BigDecimal("0.12");

System.out.println(numA.compareTo(numB));//结果为 1

4.四舍五入

最常用的是ROUND_HALF_UP(向上取整) 和ROUND_HALF_DOWN(向下取整)

BigDecimal numA=new BigDecimal("0.625");

BigDecimal numB=new BigDecimal("0.125");

System.out.println(numA.setScale(2,BigDecimal.ROUND_HALF_UP));//结果0.63 

System.out.println(numA.setScale(2,BigDecimal.ROUND_HALF_UP));//结果0.12

ROUND_HALF_UP是最常用

5.转为负数

new BigDecimail().negate()     返回负数

6.绝对值

new BigDecimal("-3.1").abs()   返回正数 3.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋斗鱼

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值