BigInteger

  • BigInteger类是用于解决整形类型(含基本数据类型及对应的包装类,)无法表示特别大的数字及运算的问题,即使是占用字节数最多的整形long,能表示的范围也是有限的.
  • 理论上,你可以使用BigInteger表示任意整数
  • 基于java8中BigInteger的构造方法.

    BigDecimal的构造方法2
String value="777777733333322222999991111111999999933333399999999333333399999955555999995555";
BigInteger number=new BigInteger(value);

BigInteger的运算方式

  • 不可以使用运算符号处理BigInteger的运算

    • 本质上通过BigInteger类创建出来的是一个个对象,并不是数字,
  • 你必须通过BigInteger提供的Api实现需要的运算
    • 例如:public BigInteger add(BigInteger val)
import java.math.BigInteger;public class BigIntegerDemo {public static void main(String[] args) {//下面的value已经超过了long的最大长度String value1="7777777777777777666666666666666644444444444444222222222222222";String value2="6666666666666666444444444444442222222222222221111111111000000";BigInteger number1=new BigInteger(value1);BigInteger number2=new BigInteger(value2);System.out.println(number1);System.out.println(number2);BigInteger result;result = number1.add(number2);System.out.println(result);}
}

BigInteger的常用API如下

import java.math.BigInteger;public class BigIntegerDemo {public static void main(String[] args) {//下面的value已经超过了long的最大长度String value1="7777777777777777666666666666666644444444444444222222222222222";String value2="6666666666666666444444444444442222222222222221111111111000000";BigInteger number1=new BigInteger(value1);BigInteger number2=new BigInteger(value2);System.out.println(number1);System.out.println(number2);BigInteger result;//加法result = number1.add(number2);System.out.println(result);//减法result=number1.subtract(number2);System.out.println(result);//乘法result=number1.multiply(number2);System.out.println(result);//除法result=number1.divide(number2);BigInteger[] bigIntegers = number1.divideAndRemainder(number2);System.out.println(result);//除法并求余数//result2[0]是除法的结果   result2[1]是余数的结果BigInteger[] result2 = number1.divideAndRemainder(number2);System.out.println(result2);System.out.println("===============");System.out.println(result2[0]);System.out.println(result2[1]);}
}

将BigInteger转换成为基本类型


== 注意:在进行装换之前,应该明确是否会丢失精度,避免转换结果不符合预期==

BigInteger小结

  • 使用BigInteger可以表示非常大的整数
  • BigInteger的构造方法重载了几次,推荐使用String作为参数的那个
  • 当需要算术运算时,必须使用BigInteger提供的API
  • BigInteger的API几乎包括了你能想到的所有数值操作;
  • 你可以将BigInteger装换成任何基本数据类型,但可能丢失精度
    • 在装换之前,应先明确是否可能丢失精度
    • 你不一定需要将结果转装换为数值类型,是字符串也可以用于显示或存储

处理大数字的建议

关于BigDecimal

  • 使用float,double及其对应的包装类时,运算精度可能不满足需求

    • float最多只有7位有效数,则其精度为6~7位
    • double最多只有16位有效数,则其精度为15~16
  • 使用float,double及其对应的包装类时,不便于小数点以后的若干为进行截取,四舍五入或相关处理
import java.math.BigDecimal;
import java.math.BigInteger;public class BigDecimalDemo {public static void main(String[] args) {//创建2个基本类型的浮点数double d1=0.1;double d2=0.2;//使用2个double求和的结果System.out.println(d1+d2);//0.30000000000000004//创建2个BigDecimal对象String s1="0.1";String s2="0.2";BigDecimal number1=new BigDecimal(s1);BigDecimal number2=new BigDecimal(s2);BigDecimal add = number1.add(number2);System.out.println(add);}
}

通过静态方法创建BigDecimal对象

import java.math.BigDecimal;
import java.math.BigInteger;public class BigDecimalDemo {public static void main(String[] args) {//创建2个基本类型的浮点数double d1=0.1;double d2=0.2;//使用2个double求和的结果System.out.println(d1+d2);//0.30000000000000004//用它的静态方法valueOf()方法创建BigDecimal对象BigDecimal number3=BigDecimal.valueOf(d1);BigDecimal number4=BigDecimal.valueOf(d2);BigDecimal add1 = number3.add(number4);System.out.println(add1);}
}

我们看见BigDecimal还有如下的构造方法

import java.math.BigDecimal;
import java.math.BigInteger;public class BigDecimalDemo {public static void main(String[] args) {//创建2个基本类型的浮点数double d1=0.1;double d2=0.2;//使用2个double求和的结果System.out.println(d1+d2);//0.30000000000000004//创建2个BigDecimal对象String s1="0.1";String s2="0.2";BigDecimal number1=new BigDecimal(s1);BigDecimal number2=new BigDecimal(s2);BigDecimal add = number1.add(number2);System.out.println(add);//当原数使用double表示时,不要使用double作为构造方法的参数来创建BigDecimal对象.BigDecimal number5=new BigDecimal(d1);BigDecimal number6=new BigDecimal(d2);BigDecimal add2 = number5.add(number6);System.out.println(add2);//结果是不对的/*** 小结:当原数使用String表示时,使用构造方法创建BigDecimal对象* 当原数使用double表示时,使用静态valueOf()方法创建BigDecimal* 当原数使用double表示时,不要使用double作为构造方法的参数来创建BigDecimal对象.*/}
}

小结

  • 当原数使用String表示时,使用构造方法创建BigDecimal对象
  • 当原数使用double表示时,使用静态valueOf()方法创建BigDecimal
  • 当原数使用double表示时,不要使用double作为构造方法的参数来创建BigDecimal对象.

BigDecimal常用的api


除法运算的roundingMode

  • 关于除法divide()方法,使用roundingMode可以设置运算时的舍入模式(是舍入模式,不是舍去模式)
  • 使用BigDecimal类中以Round为前缀的常量表示
    • 例如:BigDecimal.ROUND_HALF_UP
import java.math.BigDecimal;
import java.math.BigInteger;public class BigDecimalDemo {public static void main(String[] args) {//创建2个基本类型的浮点数double d1=0.13;double d2=0.234;//使用2个double求和的结果System.out.println(d1+d2);//0.30000000000000004//创建2个BigDecimal对象String s1="0.1";String s2="0.025";BigDecimal number1=new BigDecimal(s1);BigDecimal number2=new BigDecimal(s2);BigDecimal add = number1.add(number2);System.out.println(add)BigDecimal divide = number1.divide(number2);System.out.println(divide);BigDecimal divide1 = number1.divide(number2, BigDecimal.ROUND_UP);System.out.println(divide1);}
}

将BigDecimal转换为基本类型

BigDecimal小结

  • 使用BigDecimal主要解决基本数据类型运算精度不足的问题
  • 当原数使用String表示时,使用构造方法创建BigDecimal对象
  • 当原数使用double表示时,使用valueOf()静态方法创建BigDecimal对象
  • 当需要进行运算时,必须使用BigDecimal提供的API
  • BigDecimal的API几乎包括了你能想到的所有数据操作
  • 你可以将BigInteger装换成任何基本数据类型,单可能丢失精度
    • 在转换之前,应先明确是否可能丢失精度
    • 你不一定需要将结果转换为数值型,使用字符串也可以用于显示或存储.

处理高精度数据的建议

关于NumberFormat类

  • NumberFormat类是java.text包中的一个工具类,它主要作用是对数值进行格式化,得到期望格式的字符串.

    • 例如,当你期望将数字装换称为把粉笔格式时,输入0.37,将得到37%
    • 注意:只要对象的本质是数值,均可格式化
      + BingInteger,BigDecimal.String等
    • 格式化后得到的是StringBuffer对象
      + 一定程度上,你可以把StringBuffer直接理解为String
  • NumberFormat类是抽象类,不可以直接创建对象

预置的几种NumberFormat

  • 你可以通过NumberFormat的几个静态方法得到预置的NumberFormat对象
import java.math.BigDecimal;
import java.text.NumberFormat;public class NumberFormatDemo {public static void main(String[] args) {//将被格式化的数double value=95.32;BigDecimal number=BigDecimal.valueOf(value);//获取NumberFormat工具对象NumberFormat percentInstance = NumberFormat.getPercentInstance();NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();//执行格式化String format = percentInstance.format(number);String format1 = percentInstance.format(value);System.out.println(format);System.out.println(format1);String format2 = currencyInstance.format(number);String format3 = currencyInstance.format(value);System.out.println(format2);System.out.println(format3);/*** 9,532%* 9,532%* ¥95.32* ¥95.32*/}
}

关于Locale对象

  • 可以通过Locale的静态常量获取该类型对象,例如
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Locale;public class NumberFormatDemo {public static void main(String[] args) {//将被格式化的数double value=95.32;BigDecimal number=BigDecimal.valueOf(value);//获取NumberFormat工具对象.Locale.法国的,记住后面.的不一定是国家,它是地区.比如中国香港,和中国大陆是不一样的.NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.FRANCE);String format2 = currencyInstance.format(number);String format3 = currencyInstance.format(value);System.out.println(format2);System.out.println(format3);}
}

小结

  • 使用NumberFormat 可以将数值格式化为特点的格式,包括

    • 数字
    • 整形数
    • 货币样式(可设置地区)
    • 百分比
  • 只要数据的本质是数值,都可以格式化
  • 先通过NumberFormat的静态方法获取对象,在调用format()方法即可得到格式化后的字符串
    • 根据期望目标格式,调用不同的方法
    • 得到的结果是StringBuffer对象

关于BigInteger和BigDecimal相关推荐

  1. BigInteger和BigDecimal类

    要点提示: BigInteger和BigDecimal类可以用于表示任意大小和精度的整数或者十进制数. 如果要进行非常大的数的计算或者高精度浮点值的计算,可以使用java.math包中的BigInte ...

  2. Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解)

    文章目录 1.基本函数 1.1 java.math.BigInteger.valueOf(long val) 2.运算法则 2.1 基本运算 2.2 compareTo(BigInteger othe ...

  3. Java5:BigInteger、BigDecimal详解

    从Java4到Java5,Java对BigInteger.BigDecimal两个类功能一直再做扩展与改进.主要原因是这两个数据类型很重要,在高精度的计算中全靠这两个数据类型了.BigInteger和 ...

  4. java之包装类与BigInteger、BigDecimal

    一.包装类 (1)包装类与原类型 Integer               int 的包装类 Boolean             boolean 的包装类 Character          ...

  5. Java常用类(5)--不可变的任意精度BigInteger、BigDecimal类

    文章目录 BigInteger类 BigDecimal类 BigInteger类 Integer类作为int的包装类,能存储的最大整型值为2^31-1,Long类也是有限的, 最大为2^63-1.如果 ...

  6. java中大数字表示什么_JAVA中大数字的的处理:BigInteger和BigDecimal

    关键技术剖析: ² BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息. ² BigDecimal:可以精确地表示任意精度的小数,同时在运算过程 ...

  7. Java番外篇4——BigInteger与BigDecimal

    Java番外篇4--BigInteger与BigDecimal 为了解决大数运算的问题 操作整型:BigInteger 操作小数:BigDecimal 1.BigInteger 方法声明 功能介绍 p ...

  8. Java篇 - 最全BigInteger和BigDecimal实战

    最近公司在做一款区块链钱包,区块链上传输的数值都是很大的,大到几十位.用Java的基本类型是处理不了的,int占32位,long.double占64位,如果用这些基本数据类型运算的话,第一是存储不了这 ...

  9. java bigdecimal.valueof_java 中的大數據類型(BigInteger和BigDecimal) | 學步園

    一.為什麼為用到BigInteger和BigDecimal這種數據類型呢? 我們非常清楚,java裡面整型int與浮點型float,double它們存放數據的範圍是有邊界的.那麼如果需要更大的數據時, ...

  10. Java大数据BigInteger和BigDecimal

    BigInteger和BigDecimal是以方法调用方式取代运算符方式来实现,等于是用速度换取了精度. BigInteger(长整数) BigInteger的常量 常量名称 常量含义 BigInte ...

最新文章

  1. cocos2d-x一些核心概念介绍
  2. ajax java用户名查重_Django之AJAX
  3. Linux中设置定期备份oracle数据库
  4. 台式电脑不拉网线上网_在家里想不拉宽带用无线上网,试试这几招?
  5. P3701 -「伪模板」主席树【网络流,最大流】
  6. 汇编 cmp_汇编复习
  7. Druid学习之路 (四)Druid的数据采集格式
  8. java map 缓存池_map端合并(分布式缓存)
  9. 遇到的一个很有趣的陷阱
  10. Phoenix使用注意事项以及跟标准sql的不同
  11. MATLAB画圆时却显示椭圆?一个命令解决问题!
  12. java 分页读取数据
  13. C++实践参考——动物这样叫
  14. 关于CSS Reset 于Normalize.css
  15. stm32-HY-SRF05 超声波模块-原理及代码解读
  16. 多智能体中的图论——多智能体的一致性(二)
  17. 蓝桥杯 印章Java
  18. linux 流量控制 1
  19. fabric 环境 搭建与安装
  20. 社区物联网医院解决方案(智慧医疗)

热门文章

  1. valorant服务器显示AP,Valorant安装好了之后不断提示重启的解决方法
  2. 学无止境·MySQL③
  3. 直播预告:AAAI 2021专场二| AI TIME PhD
  4. Re-ID 2019 Review
  5. html从魔鬼拼图到行云流水之一
  6. matlab求高阶微分的命令,matlab求解高阶微分方程辅导
  7. 线程池+进程池爬虫—深圳房价+数据分析+pyecharts可视化
  8. 搭建Maven父子项目结构
  9. 实战项目:设计实现一个流程编排框架(设计)
  10. mysql远程连接10061_navicat 远程链接数据库报错10061,1130解决