高精度(小数——BigDecimal)

简介: 高精度(小数——BigDecimal)

是什么:(针对浮点类型)

   BigDecimal主要是运用在对于超过基本数据类型当中的浮点类型的数据的处理,无论这个小数是多少都能够进行一个处理,而不用

去担心难以存储的一个问题

怎么用?

   BigDecimal的构造主要包括以下的几个方法:

   1:BigDecimal  num(double a)在这里进行输入相应的浮点数

  2:BigDecimal  num(String a)以字符串的形式进行一个相应的输入

   3: BigDecimal  valueOf(double a)这个的作用主要是为了能够将原本的浮点数据类型转换成为一个BigDecimal的类型,再进行一个var的实现

Tips:

   在这里,为了能够精确的对于小数进行计算,构造方法的选择上,尽量的选择后两种,第一种的构造方式容易引起数据精度丢失

   方法:

   BigDecimal

 加法:public BigDecimal add(BigDecimal b)

   减法:public BigDecimal subtract(BigDecimal b)

 乘法:public BigDecimal divide(BigDecimal b)


   除法:public BigDecimal divide(BigDecimal b)


   另外一种除法形式:(推荐)

   public BigDecimal divide(另外一个的BigDecimal对象,精确到小数点后几位,再加上舍去模式)


       Tips:

       对于舍去的模式,主要存在以下的三种形式:

   1:RoundingMode.up:向上进行直接的取整

   2: RoundingMode.DOWN:向下进行直接的取整

   3:RoundingMode.HALF_UP:使用四舍五入进行取整

BigDecimal a=new BigDecimal("0.1");
        BigDecimal b=new BigDecimal("0.2");
        System.out.println(a.add(b));
        //加法运算
        System.out.println(a.multiply(b));
        //乘法运算
        System.out.println(a.subtract(b));
        //减法运算
        System.out.println(a.divide(b));
        //除法运算
        BigDecimal c=new BigDecimal("3");
        BigDecimal d=new BigDecimal("4");
        //向上取整   1.334
        System.out.println(d.divide(c, 3, BigDecimal.ROUND_UP));
        //向下取整   1.333
        System.out.println(d.divide(c, 3, BigDecimal.ROUND_DOWN));
        //四舍五入   1.333
        System.out.println(d.divide(c, 3, BigDecimal.ROUND_HALF_UP));
相关文章
|
Java 开发框架 API
Java中高精度问题的bigdecimal解决方式
最近有空写了点老的J2EE的代码,发现有一个十分有意思的问题,当用Hibernate从数据库里把浮点数读取出来的时候做一些比如累加的工作,例如 summary 或者递减之类的,就会发现在最后的结果中会出现些许问题。 如:3.41+5.2+56.2+23.3+... (这类两位小数的价钱),结果会出现103.00000000000001这种结果,但是人算的话反而会得出正常的数据。
1963 0
|
7月前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
124 0
|
7月前
|
存储 Java
你知道Java中的BigInteger类和BigDecimal类吗?
你知道Java中的BigInteger类和BigDecimal类吗?
110 0
|
Java
Java开发篇- 从BigDecimal的divide的异常说起
在过去做项目的某一天中,突然有小伙伴说两个BigDecimal的数据相除(divide)报错了,觉得不可能,然后问他是怎么编写的,他说很简单呀,就是new了2个BigDecimal,然后相除的结果赋值给另外一个BigDecimal对象。听起来觉得没有问题,正常来说,2个Integer(int),2个Double(double)都不会报错,然后问是什么异常,说是一个很奇怪的异常
444 0
|
4月前
|
Java
【Java】Math、System、RunTime、BigDecimal类常用方法
【Java】Math、System、RunTime、BigDecimal类常用方法
|
6月前
|
Java
深入了解Java中的BigDecimal类及其方法
深入了解Java中的BigDecimal类及其方法
|
6月前
|
安全 Java
java中BigDecimal详解
java中BigDecimal详解
|
7月前
|
算法 Java API
java BigDecimal使用详细介绍
java BigDecimal使用详细介绍
java BigDecimal使用详细介绍
|
7月前
|
存储 Java
Java中BigDecimal怎样取反
在上述示例中,`number.negate()`会将BigDecimal对象 `number`的值取反,并将结果存储在新的BigDecimal对象 `negated`中。
144 0
|
存储 Java API
从零开始学习 Java:简单易懂的入门指南之Objects、BigInteger、BigDecimal(十四)
从零开始学习 Java:简单易懂的入门指南之Objects、BigInteger、BigDecimal(十四)