BigInteger

BigInteger的作用是对整数做计算,一般的使用String类型初始化BigInteger,它除了封装了基本的加减乘除运算外还提供了signum(),abs()等函数,使用方式基本为创建两个BigInteger进行运算例如A_BigInteger.add(B_BigInteger)对两个数进行加法运算,结果还是一个BigInteger。然后它的作用远远不止于此,Java的八种数据类型整数精度最大的是Long,如果计算值超过了Long.Max_Value就会损失精度。使用BigInteger则完全可以避免。两个BigInteger的结果可以通过终止函数获取结果,例如intValue()将结果转换位int值,但是这里需要注意,如果结果已经超过了目标结果类型的精度则会不准确,最好的方式是通过.toString()函数获取一个字符串的值,这样即使结果大于Long.Max_Value也不会丢失精度。最后BigInteger不能运算小数,否则抛出异常。以下是代码示例:

public static void main(String[] args) {
// int最大值 2147483647
System.out.println(Integer.MAX_VALUE);
// long最大值 9223372036854775807
System.out.println(Long.MAX_VALUE); BigInteger bigInteger1 = new BigInteger("9223372036854775807");
BigInteger bigInteger2 = new BigInteger("9223372036854775807");
// 两个数相乘
BigInteger value12 = bigInteger1.multiply(bigInteger2);
// 直接获取Long结果是错误的,因为已经超过了Long的最大精度
// long longValue = value12.longValue();
// 获取字符串可以
String svalue12 = value12.toString();
// 85070591730234615847396907784232501249
System.out.println(svalue12); // 在将相乘的结果/9223372036854775807
BigInteger bigInteger3 = new BigInteger(svalue12);
BigInteger bigInteger4 = new BigInteger("9223372036854775807");
// 两个数相除
BigInteger bigInteger34 = bigInteger3.divide(bigInteger4);
// 这个结果是没有超过Long的精度
long lbigInteger34 = bigInteger34.longValue();
// 9223372036854775807
System.out.println(lbigInteger34); BigInteger bigInteger5 = new BigInteger("1");
BigInteger bigInteger6 = new BigInteger("1");
// 两个数相加
BigInteger bigInteger56 = bigInteger5.add(bigInteger6);
System.out.println(bigInteger56.byteValue()); BigInteger bigInteger7 = new BigInteger("2");
BigInteger bigInteger8 = new BigInteger("1");
// 两个数相减
BigInteger bigInteger78 = bigInteger7.subtract(bigInteger8);
System.out.println(bigInteger78.byteValue()); // 错误的,它不支持小数
// BigInteger bigInteger9 = new BigInteger("1.2");
}

BigDecimal

BigDecimal在实际开发中要比BigInteger的使用频率高的多,原因就是它可以计算小数,并且它可以根据用户的设置对小数结果进行改变,例如保留小数位数,保留小数策略。

    public static void main(String[] args) {
Long max_long = Long.MAX_VALUE;
System.out.println(max_long); BigInteger bigInteger = new BigInteger(max_long + "");
// 你可以使用一个BigInteger实例化BigDecimal
BigDecimal bigDecimal1 = new BigDecimal(bigInteger);
BigDecimal bigDecimal2 = new BigDecimal(bigInteger);
// 除法运算
BigDecimal bigDecimal12 = bigDecimal1.divide(bigDecimal2);
System.out.println(bigDecimal12.intValue()); // 使用字符串实例化BigDecimal做加法运算
BigDecimal bigDecimal3 = new BigDecimal("1");
BigDecimal bigDecimal4 = new BigDecimal("1");
BigDecimal bigDecimal34 = bigDecimal3.add(bigDecimal4);
System.out.println(bigDecimal34.intValue()); // 使用字符串实例化BigDecimal做减法运算
BigDecimal bigDecimal5 = new BigDecimal("5");
BigDecimal bigDecimal6 = new BigDecimal("3");
BigDecimal bigDecimal56 = bigDecimal5.subtract(bigDecimal6);
System.out.println(bigDecimal56.intValue()); // 使用字符串实例化BigDecimal做乘法运算
BigDecimal bigDecimal7 = new BigDecimal("3");
BigDecimal bigDecimal8 = new BigDecimal("4");
BigDecimal bigDecimal78 = bigDecimal7.multiply(bigDecimal8);
System.out.println(bigDecimal78.intValue()); // 对小数做操作,这个加法运算的结果是 7.9888
BigDecimal bigDecimal9 = new BigDecimal("3.1");
BigDecimal bigDecimal10 = new BigDecimal("4.8888");
BigDecimal bigDecimal910 = bigDecimal9.add(bigDecimal10);
System.out.println(bigDecimal910.toString()); BigDecimal bigDecimala1 = new BigDecimal("3.1");
BigDecimal bigDecimala2 = new BigDecimal("4.8888");
BigDecimal bigDecimala12 = bigDecimala1.add(bigDecimala2);
// 对一个BigDecimal的结果进行小数舍入,以下是保留小数点后3位,多余的四舍五入 7.989
BigDecimal sbigDecimala12 = bigDecimala12.setScale(3, BigDecimal.ROUND_HALF_UP);
System.out.println(sbigDecimala12.toString());
}

BigInteger和BigDecimal的更多相关文章

  1. Java的大数操作分为BigInteger和BigDecimal

    Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...

  2. Java 大数类BigInteger和BigDecimal的基本函数

    在Java中有两个类BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运 ...

  3. BigInteger与BigDecimal

    BigInteger与BigDecimal Java大数字运算(BigInteger类和BigDecimal类) 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger ...

  4. 【转】BigInteger、BigDecimal详解

    参考 http://lavasoft.blog.51cto.com/62575/228705/ 从Java4到Java5,Java对BigInteger.BigDecimal两个类功能一直再做扩展与改 ...

  5. Java 之 数学相关类 Math、BigInteger、BigDecimal

    一.java.lang.Math 类 一.Math 类概述 java.lang.Math 类包含用于执行基本数学运算的方法,如指数.对数.平方根和三角函数.类似于这样的类,其所有方法均为静态方法,并且 ...

  6. 拯救你丢失的精度——BigInteger和BigDecimal类(入门)

    第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法: //针对超过整数范围的运算(整数最大值:2147483647) BigInt ...

  7. java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal

    一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  8. Day30 BigInteger和BigDecimal

    BigInteger与BigDecimal BigInteger类 Integer类作为int的包装类,能存储的最大整型值为2 31-1,Long类也是有限的, 最大为2 63-1.如果要表示再大的整 ...

  9. 经常使用的系统类Math、Arrays、System、BigInteger和BigDecimal以及日期类,时间戳

    一.Math 常用类: //看看Math常用的方法(静态方法)//1.abs绝对值int abs = Math . abs(-9);System. out . printLn(abs);//9//2. ...

随机推荐

  1. [Java数据结构]LinkedHashMap,TreeMap

    HashMap不能记住插入时的顺序,但LinkedHashMap可以做到这一点. 例程: Map<Integer,String> empMap=new LinkedHashMap<I ...

  2. java 将map转为实体类

    使用反射将map转为对象,如果不使用反射的话需要一个get一个set写起来麻烦,并且不通用,所以写了一个通用的方法将map集合转为对象,直接看代码,注释也都挺清楚的 public static < ...

  3. leetcode刷题-36有效的数独

    题目 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次.数字 1-9 在每一列只能出现一次.数字 1-9 在每一个以粗实线分隔 ...

  4. 浏览器调试的必知必会,零基础足够详细-第一节console面板、移动端调试

    前言 本文已经发布视频点击查看 开发过程中,浏览器的调试非常重要,可以说是必备的技巧,本文我就会分享一些自己掌握的技巧,欢迎补充 我们默认使用Chrome浏览器,但是你使用新edge浏览器也是可以的 ...

  5. Oracle数据库添加约束

    主键约束(两个特性)1:主键必须写2:主键不可重复 create table stu01( sid varchar(100), sname varchar2(100) --constraint PK_ ...

  6. Linux:crond(crontab)定时任务

    一..定义 Crond 是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.一般在安装完系统时,crond会默认存在. crond默认每分钟会检查系统中是否有需要执行的定时任务.如果有 ...

  7. Django-配置镜像源,虚拟环境详解

    0.配源虚拟 全局配源 阿里云镜像站:https://developer.aliyun.com/mirror/ # 在cmd中操作,查找文件 C:\Users\Administrator>pip ...

  8. [LeetCode]196. 删除重复的电子邮箱(delete)

    题目 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | ...

  9. day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置

    目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...

  10. Java8——Stream流式操作的一点小总结

    我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...