我是靠谱客的博主 神勇板栗,最近开发中收集的这篇文章主要介绍Java中BigInteger和BigDecimal的用法(写题真的很好用,还精确),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

精确

首先,这个经典的问题大家都知道
在这里插入图片描述
对于0.2+0.1这个数字,我们都知道是0.3
可是计算机执行的结果却是
0.30000000000000004
在这里插入图片描述
原因在于我们的计算机是二进制的。
浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
例如:0.4的二进制表示并非就是精确的0.4。反而最为接近的二进制表示是 0.3999999999999999。
浮点数的值实际上是由一个特定的数学公式计算得到的。
如果我们使用BigDecimal类
在这里插入图片描述
我们可以看到,输出结果是正确的.
在这里插入图片描述

加减乘除的基本运算

刚才使用了一句

  System.out.println( a.add(b));

a.add(b)就是A+B
相应的

public BigDecimal add(BigDecimal value);                        //加法

public BigDecimal subtract(BigDecimal value);                   //减法 

public BigDecimal multiply(BigDecimal value);                   //乘法

public BigDecimal divide(BigDecimal value);                     //除法

如果我们使用,直接就可以写

        a.add(b)
        a.subtract(b)
        a.multiply(b)
        a.divide(b)

就可以进行加减乘除啦

这里有一点需要注意的是除法运算divide.

BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
具体的这个问题怎么解决建议百度,不再赘述.

举例写题

例如OJ上的这道题
在这里插入图片描述
C语言将要使用字符串来写
java只需要

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);
			BigDecimal b1 = sc.nextBigDecimal();
        	BigDecimal b2 = sc.nextBigDecimal();
        	System.out.println(b1.add(b2));
		}
    }

我们看到,这个代码就已经AC了
在这里插入图片描述
再例如
在这里插入图片描述
高精度乘法

import java.math.BigDecimal;
import java.util.Scanner;
public class bigshu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigDecimal a = sc.nextBigDecimal();
        BigDecimal b = sc.nextBigDecimal();
        System.out.println(a.multiply(b));
    }
}

在这里插入图片描述

作用很多,不仅仅是加减乘除

因为BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大
例如取绝对值也可以用
在这里插入图片描述

import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n--!=0) {
            BigDecimal a = sc.nextBigDecimal();
            System.out.println(a.abs());
            System.out.println("");
        }
    }
}

在这里插入图片描述
相应的还有
.remainder(); 取余

.pow(); a.pow(b)=a^b

.gcd(); 最大公约数

.abs(); 绝对值

.negate(); 取反数

.mod(); a.mod(b)=a%b=a.remainder(b);

.max(); min();

.punlic int comareTo();

.boolean equals(); 是否相等

快去使用啊啊啊

最后

以上就是神勇板栗为你收集整理的Java中BigInteger和BigDecimal的用法(写题真的很好用,还精确)的全部内容,希望文章能够帮你解决Java中BigInteger和BigDecimal的用法(写题真的很好用,还精确)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部