第三阶段 JAVA常见对象的学习

BigInteger和BigDecimal类

BigInteger类

(一) 构造方法:

  1. //针对超过整数范围的运算(整数最大值:2147483647)
  2. BigInteger(String val)

(二) 常用方法:

  1. //加
  2. public BigInteger add(BigInteger val)
  3. //减
  4. public BigInteger subtract(BigInteger val)
  5. //乘
  6. public BigInteger multiply(BigInteger val)
  7. //除
  8. public BigInteger divide(BigInteger val)
  9. //返回商和余数的数组
  10. public BigInteger[] divideAndRemainder(BigInteger val)
  1. import java.math.BigInteger;
  2. public class BigIntegerDemo {
  3. public static void main(String[] args) {
  4. BigInteger bi1 = new BigInteger("100");
  5. BigInteger bi2 = new BigInteger("50");
  6. BigInteger[] bis = bi1.divideAndRemainder(bi2);
  7. System.out.println("商:" + bis[0]);
  8. System.out.println("余数:" + bis[1]);
  9. }
  10. }
  11. //运行结果
  12. 商:2
  13. 余数:0

BigInteger类

由于在运算的时候,float类型和double很容易丢失精度(下例为演示),所以为了能精确的表示、计算浮点数,Java提供了BigDecimal

  1. public class BigDecimalDemo {
  2. public static void main(String[] args) {
  3. System.out.println(0.09 + 0.01);
  4. System.out.println(1.0 - 0.32);
  5. System.out.println(1.026 * 100);
  6. System.out.println(1.502 / 100);
  7. System.out.println(1.0 - 0.17);
  8. }
  9. }
  10. //运行结果
  11. 0.09999999999999999
  12. 0.6799999999999999
  13. 102.60000000000001
  14. 0.01502
  15. 0.83

(一) 构造方法:

我们来帖一组说明

BigDecimal

  1. public BigDecimal(double val)

将double转换为BigDecimal ,这是double的二进制浮点值的精确十进制表示。

返回的BigDecimal是(10scale × val)是一个整数的最小值。

笔记:

  1. 这个构造函数的结果可能有些不可预测。 可以假设在Java中写入new BigDecimal(0.1)创建一个BigDecimal ,它完全等于0.1(非标尺值为1,比例为1),但实际上等于0.1000000000000000055511151231257827021181583404541015625。 这是因为0.1不能像double (或者作为任何有限长度的二进制分数)精确地表示。 因此,正在被传递给构造的值不是正好等于0.1,虽然表面上。
  2. 该String构造,在另一方面,是完全可以预测的:写new BigDecimal("0.1")创建BigDecimal这正好等于0.1,正如人们所期望的那样。 因此, 一般建议使用String constructor优先于此。
  3. 当double必须用作源为BigDecimal ,注意,此构造提供了一个精确的转换; 它不会将double转换为String使用Double.toString(double)方法,然后使用BigDecimal(String)构造函数相同的结果。 要获得该结果,请使用static valueOf(double)方法。
  • 参数

    val - double值转换为 BigDecimal 。

  • 异常

    NumberFormatException - 如果 val 是无限或NaN。

构造方法:建议使用 → BigDecimal(String s)

(二) 常用方法:

  1. import java.math.BigDecimal;
  2. public class BigDecimalDemo2 {
  3. public static void main(String[] args) {
  4. BigDecimal bd1 = new BigDecimal("0.09");
  5. BigDecimal bd2 = new BigDecimal("0.01");
  6. System.out.println("加:" + bd1.add(bd2));
  7. BigDecimal bd3 = new BigDecimal("1.0");
  8. BigDecimal bd4 = new BigDecimal("0.32");
  9. System.out.println("减:" + bd3.subtract(bd4));
  10. BigDecimal bd5 = new BigDecimal("1.026");
  11. BigDecimal bd6 = new BigDecimal("100");
  12. System.out.println("乘:" + bd5.multiply(bd6));
  13. BigDecimal bd7 = new BigDecimal("1.502");
  14. BigDecimal bd8 = new BigDecimal("100");
  15. System.out.println("除:" + bd7.divide(bd8));
  16. }
  17. }
  18. //运行结果
  19. 加:0.10
  20. 减:0.68
  21. 乘:102.600
  22. 除:0.01502

结尾:

如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !_

如果能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创Java技术的公众号:理想二旬不止

拯救你丢失的精度——BigInteger和BigDecimal类(入门)的更多相关文章

  1. BigInteger、BigDecimal类的使用详解

    我们都知道在java里边long算是存储长度比较大的了,但是如果有很大的数我们应该怎么处理呢,不用怕,java还为我们准备了一个BigInteger的类,那么这个类到底能存储多大的数呢,这个一时还真不 ...

  2. Math类、Random类、System类、BigInteger类、BigDecimal类、Date类、SimpleDateFormat、Calendar类

    Math类* A:Math类概述 * Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. * B:成员方法 * public static int abs(int a)  ...

  3. BIgInteger类和BigDecimal类的理解

    第一部分: 这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; Bi ...

  4. Day30 BigInteger和BigDecimal

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

  5. Java基础教程——BigDecimal类

    BigDecimal类 float.double类型的数字在计算的时候,容易发生精度丢失. 使用java.math.BigDecimal类可以解决此类问题. 前面讲过Math类,现在的BigDecim ...

  6. Java:利用BigDecimal类巧妙处理Double类型精度丢失

    目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数? 如何用BigDecimal解决double精度问题? new BigDecimal(doub ...

  7. java 14 -6 BigInteger和BigDecimal

    BigInteger:可以让超过Integer范围内的数据进行运算 构造方法: BigInteger(String val) import java.math.BigInteger; public c ...

  8. 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类

    BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进 ...

  9. Java中的BigDecimal类精度问题

    bigdecimal 能保证精度的原理是:BigDecimal的解决方案就是,不使用二进制,而是使用十进制(BigInteger)+小数点位置(scale)来表示小数,就是把所有的小数变成整数,记录小 ...

随机推荐

  1. CF 940F - Machine Learning ( 带 修 )

    题目: 链接:https://codeforces.com/problemset/problem/940/F 题意:给你n个数,a[i]有q个操作,操作有两种:操作1.       1 x y 表示询 ...

  2. 【概率论】1-1:概率定义(Definition of Probability)

    title: [概率论]1-1:概率定义(Definition of Probability) categories: Mathematic Probability keywords: Sample ...

  3. ERROR 1010 (HY000): Error dropping database (can't rmdir './zabbix/', errno: 17)

    在删除数据库的时候报标题所示错误 mysql> drop database zabbix; ERROR 1010 (HY000): Error dropping database (can't ...

  4. nodejs 用http模块搭建的服务器的路由,以及路由代码的重构过程

    我们打开浏览器浏览网页时,点击上面不同的模块,地址栏中的路由会发生相应的变化,从而,浏览器向服务器发起请求的内容也会发生改变,那么服务端,是如何来做的呢? 服务端也是,通过路由来做出不同的响应的,我们 ...

  5. c isnormal

    Returns whether x is a normal value: i.e., whether it is neither infinity, NaN, zero or subnormal. / ...

  6. [linux]sudo 出现unable to resolve host 解决方法

    Ubuntu环境, 假设这台机器名字(hostname)叫abc, 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host abc虽然sudo 还是可以正常执行 ...

  7. 设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。

    原创,转载请注明出处.https://www.cnblogs.com/yangf428/p/11254370.html 天勤例题[2-1]: 设顺序表va中的数据元素递增有序.试写一算法,将x插入到顺 ...

  8. hibernate-validator校验框架学习

    1.引入jar包 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate ...

  9. Flutter实现TabBarView切换页面时每个页面只initState一次

    在  TabBarView  组件中切换页面时,子页面每次均会重新  initState  一次,导致每次都切换页面均会重绘,如下图 如果需要只在第一次进页面  initState  一次,后面再进入 ...

  10. 安装mysql后必须要做的一件事

    Step 1. 检查默认账户和密码 $cat /etc/mysql/debian.cnf # 在ubuntu下查看默认账户名和密码 会看到 [client] host = localhost user ...