【JAVA零基础入门系列】Day9 Java中的那个大数值

简介:   【JAVA零基础入门系列】(已完结)导航目录Day1 开发环境搭建Day2 Java集成开发环境IDEADay3 Java基本数据类型Day4 变量与常量Day5 Java中的运算符Day6 Java字符串Day7 Java输入与输出Day8 Java的控制流程Day9 Java中的那个大数值Day10 Java中的数组Day11 Java中的类和对象Day12 Java类的简单应用Day13 Java类的继承与多态Day14 Java对象的克隆Day15 对象的比较  什么是大数值?用脚趾头想也知道,当然是“大”的数值(233)。

  【JAVA零基础入门系列】(已完结)导航目录

  什么是大数值?用脚趾头想也知道,当然是“大”的数值(233)。Java中有两个用于表示大数值的类,BigInteger和BigDecimal,那到底能表示多大的数值呢?理论上,可以表示任意长度,任意精度,想要多大,就能有多大。

  为什么要用大数值?理由很简单,当整数跟浮点数的精度不能满足要求时,就需要用更大或者精度更高的类型,这时候大数值就应运而生了。

  short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)。

  int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 

  long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)

  float的取值范围为3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节 

  double的取值范围为1.797693e+308~ 4.9000000e-324 占用8个字节 

   不管是整数型还是浮点型,它们的表示范围和精度都是有限的,所以有时候无法满足要求或者要求高精度计算时,就需要用到大数值了。先来看一个栗子。

public class Test{
    public static void main(String[] args) {
        double result = 2.0-1.1;
        System.out.println(result);
    }
}

  你猜,结果是什么?

  

  惊不惊喜?意不意外?你也许会觉得,WTF?!!不是0.9吗?可事实上,由于浮点数的存储及运算规则上的规定,就出现了上图结果。事实上,浮点型无法精确的表示1.1的小数部分。那到底是为什么呢?

  此处省略一万字。。。

  这样的不精确,在需要严格结果的情况时是不允许出现的,这时,我们就需要用到大数值了。改写后如下:

import java.math.BigDecimal;

public class Test{
    public static void main(String[] args) {
        BigDecimal result = BigDecimal.valueOf(2.0).subtract(BigDecimal.valueOf(1.1));
        System.out.println(result);
    }
}

  现在就能得到我们想要的结果了。

  大数值运算跟普通运算不一样,由于Java里的大数值没有重载运算符操作,也没有赋予程序员这样的权力,所以只能通过调用方法的方式进行计算。

      +——add();

      System.out.println(BigInteger.valueOf(10).add(BigInteger.valueOf(5)));

      - ——subtract();

      System.out.println(BigInteger.valueOf(10).subtract(BigInteger.valueOf(5)));

      *——multiply();

      System.out.println(BigInteger.valueOf(10).multiply(BigInteger.valueOf(5))); 

      /——divide();
      System.out.println(BigInteger.valueOf(10).divide(BigInteger.valueOf(5)));

  %——mod();取余数

  System.out.println(BigInteger.valueOf(10).mod(BigInteger.valueOf(5)));

  比较——compareTo();大于则返回正数,小于则返回负数,等于返回0.

  System.out.println(BigInteger.valueOf(10).compareTo(BigInteger.valueOf(5)))

  静态方法valueOf()用于将整数浮点数转化成大数值对象。

  大数值的内容其实并不多,之后多加练习便能熟练掌握。

  至此,本篇内容结束,欢迎继续关注!

 

真正重要的东西,用眼睛是看不见的。
相关文章
|
7月前
|
Java
2048. 下一个更大的数值平衡数 --力扣 --JAVA
如果整数  x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。 0 <= n <= 106
141 3
java 数值判断工具类
java 数值判断工具类
Java 将带有小数点的字符串转成Integer类型数值
Java 将带有小数点的字符串转成Integer类型数值
1391 0
Java 将带有小数点的字符串转成Integer类型数值
|
Java
浅谈Java中的NAN与INFINITY:数值迷失与无限可能
浅谈Java中的NAN与INFINITY:数值迷失与无限可能
501 0
|
7月前
|
Java Go C++
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
72 0
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
|
7月前
|
存储 Java 索引
Java数值类型提升机制
Java数值类型提升机制
69 0
java202303java学习笔记第四十二天DQL-数值函数2
java202303java学习笔记第四十二天DQL-数值函数2
65 0
|
存储 缓存 Java
Java 8 - 数值流Numberic Stream
Java 8 - 数值流Numberic Stream
105 0
|
Java
java中数值类型计算时是多地址,变量值会变换
java中数值类型计算时是多地址,变量值会变换
93 0
java中数值类型计算时是多地址,变量值会变换
|
缓存 前端开发 Java
由一次代码调试引发的对JAVA数值包装类型的使用的思考
由一次代码调试引发的对JAVA数值包装类型的使用的思考
115 0