JAVA基础——BigDecimal基本用法
文章目录
我们都知道,float和double在计算过程中会存在误差,如何避免使用浮点数失去精度?这里可以使用Java的Java.math包中提供的API类——BigDecimal。
BigDecimal是一个类,BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。
如何创建BigDecimal对象
创建BigDecimal有以下两种方式:
import java.math.BigDecimal;//先导入java.math包 BigDecimal bigDecimal1 = new BigDecimal("1.234567");//要带双引号,里面的参数是字符串类型,不带双引号会损失精度。 BigDecimal bigDecimal2 = BigDecimal.valueOf(1.234567);//参数为double,不必带双引号。
除了上述的两种方式以外,对于特殊的0,1,10,还可以用一下方式创建:
BigDecimal bigDecimal3 = BigDecimal.ZERO;//0 BigDecimal bigDecimal4 = BigDecimal.ONE;//1 BigDecimal bigDecimal5 = BigDecimal.TEN;//10
加减乘除运算
public BigDecimal add(BigDecimal value);//加法 public BigDecimal subtract(BigDecimal value);//减法 public BigDecimal multiply(BigDecimal value);//乘法 public BigDecimal divide(BigDecimal value);//除法
加减乘除BigDecimal的加减乘除进行运算以后都是返回了一个新的BigDecimal而不是在原有的对象上增加。
以加法为例(其它运算方法和加法相同)
public class Test { public static void main(String[] args) { BigDecimal b1 = new BigDecimal("1.5");//b1=1.5 BigDecimal b2 = new BigDecimal("2.5");//b2=2.5 BigDecimal b3 = b1.add(b2);//b3=2.5+1.5=4.0 System.out.println("b1 = " + b1)//b1的值并没有发生改变,是返回了一个新的BigDecimal而不是在原有的对象上增加。 System.out.println("b3 = " + b3); } }
输出结果:
BigDecimal比较大小
BigDecimal使用compareTo来比较大小
根据此方法,值相等但具有不同标度的两个BigDecimal对象(如,5.0 和 5.00和5.0000)被认为是相等的。
compareTo的返回值不是boolean类型,而是int类型0,1,-1。
-1表示小于,0表示相等,1表示大于。
如:
public class Test { public static void main(String[] args) { BigDecimal b1 = new BigDecimal("5.0"); BigDecimal b2 = new BigDecimal("1.0"); BigDecimal b3 = new BigDecimal("5.000"); int a = b1.compareTo(b2);//5.0大于1.0,a=1 int b = b2.compareTo(b3);//1.0小于5.000,b=-1 int c = b1.compareTo(b3);//5.0和5.000虽然标度不同但是值相等,c=0 System.out.println("a="+a); System.out.println("b="+b); System.out.println("c="+c); } }
输出结果:
BigDecimal保留小数
BigDecimal中的setScale方法用来格式化小数。
setScale中的参数定义:
ROUND_CEILING
Rounding mode to round towards positive infinity.
向正无穷方向舍入
ROUND_DOWN
Rounding mode to round towards zero.
向零方向舍入
ROUND_FLOOR
Rounding mode to round towards negative infinity.
向负无穷方向舍入
ROUND_HALF_DOWN
Rounding mode to round towards “nearest neighbor” unless both neighbors are equidistant, in which case round down.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN
Rounding mode to round towards the “nearest neighbor” unless both neighbors are equidistant, in which case, round towards the even neighbor.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP
Rounding mode to round towards “nearest neighbor” unless both neighbors are equidistant, in which case round up.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY
Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.
计算结果是精确的,不需要舍入模式
ROUND_UP
Rounding mode to round away from zero.
向远离0的方向舍入
- Java语言基础逻辑运算符的基本用法
- Java集合基础篇(3)-HashSet基本用法
- java中BigDecimal加减乘除基本用法
- 【Java基础】常用IO流的基本用法演示(持续更新)
- JAVA Script 之Jquery初步学习,入门学习,jquery基础,浅谈其基本用法。
- 转:java中BigDecimal加减乘除基本用法
- Java语言基础算术运算符的基本用法
- Java基础-多线程基本用法
- java中BigDecimal进行加减乘除的基本用法
- Java语言基础三元运算符的基本用法
- java语言基础(13)——运算符基本用法(算数、赋值、比较、逻辑、位运算符)
- 【深入Java基础】HashMap的基本用法
- java基础(3)——八大基本数据类型和类型转换,以及运算符用法
- 【Java基础15_1】Collection类及其基本用法
- JAVA基础 day21 字节流的输入和输出 字节流的缓冲区 (自己实现BufferedInputStream) 键盘输入 转换流的用法 改变标准输入输出设备 IO流操作的基本规律
- Java基础教程16-String的基本用法
- 黑马程序员 java基础—48个关键字用法
- Java基础:第十九讲 String用法(下)
- java正则表达式的基本用法
- Java程序员从笨鸟到菜鸟之(四十九)细谈struts2(十一)OGNL表达式的基本语法和用法