当我们要处理非常大的数据时,平常用的数据类型已不足以表示,在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类在理论上只要计算机内存足够大就能够表示无线大的数。它们都在java.math.*包中,我们可以在API文档中进行查看:

Java API 1.6 中文在线帮助文档 http://www.yq1012.com/api/

实例:

 import java.math.BigDecimal;
import java.math.BigInteger; /**
* 测试大数
*/
public class BigNumberDemo { /**
* 测试 BigInteger大整数类
*/
private static void testBigInteger() {
BigInteger bigInt1 = new BigInteger("12345678912345678912345"); // 实例化一个 BigInteger
long ln = 1234567899876543210L;
BigInteger bigInt2 = BigInteger.valueOf(ln); // 返回其值等于指定long的值的 BigInteger
System.out.println("测试BigInteger类:");
System.out.println("bigInt1 = " + bigInt1.toString()); // 输出值
System.out.println("bigInt2 = " + bigInt2.toString());
// 加法运算
BigInteger sum = bigInt1.add(bigInt2); // 返回值为(bigInt1+bigInt2)的 BigInteger
System.out.println("bigInt1 + bigInt2 = " + sum.toString());
// 减法运算
sum = bigInt1.subtract(bigInt2); // 返回值为(bigInt1-bigInt2)的 BigInteger
System.out.println("bigInt1 - bigInt2 = " + sum.toString());
// 乘法运算
sum = bigInt1.multiply(bigInt2); // 返回值为(bigInt1*bigInt2)的 BigInteger
System.out.println("bigInt1 * bigInt2 = " + sum.toString());
// 除法运算:整数商
sum = bigInt1.divide(bigInt2); // 返回值为(bigInt1/bigInt2)整数结果的 BigInteger
System.out.println("bigInt1 / bigInt2 = " + sum.toString());
// 除法运算:商+余数
BigInteger[] sums = bigInt1.divideAndRemainder(bigInt2); // 返回值为(bigInt1/bigInt2)整数结果的 BigInteger
System.out.println("bigInt1 / bigInt2 = " + sums[0].toString()
+ "\t余数:bigInt1 % bigInt2 = " + sums[1].toString());
// 取余数
sum = bigInt1.mod(bigInt2);
System.out.println("bigInt1 % bigInt2 = " + sum.toString());
// 指数
sum = bigInt1.pow(2);
System.out.println("bigInt1 ^ 2 = " + sum.toString());
// 比较两个数是否相等
System.out.println("比较两个数是否相等: " + bigInt1.equals(bigInt2));
// 比较两个数的大小
System.out.println("比较两个数的大小: " + bigInt1.compareTo(bigInt2)
+ " (若小于为-1,等于为0,大于为1)");
} /**
* 测试 BigDecimal大浮点数类
*/
private static void testBigDecimal() {
BigDecimal bigDec1 = new BigDecimal("1234512345678912345678912345.123"); // 实例化一个 BigDecimal
Double db = 123456789.123456D;
BigDecimal bigDec2 = BigDecimal.valueOf(db); // 返回其值等于指定Double的值的 BigDecimal
System.out.println("\n测试BigDecimal类:");
System.out.println("bigDec1 = " + bigDec1); // 输出值
System.out.println("bigDec2 = " + bigDec2.toString());
// 加法运算
BigDecimal sum = bigDec1.add(bigDec2); // 返回值为(bigDec1+bigDec2)的 BigDecimal
System.out.println("bigDec1 + bigDec2 = " + sum.toString());
// 减法运算
sum = bigDec1.subtract(bigDec2); // 返回值为(bigDec1-bigDec2)的 BigDecimal
System.out.println("bigDec1 - bigDec2 = " + sum.toString());
// 乘法运算
sum = bigDec1.multiply(bigDec2); // 返回值为(bigDec1*bigDec2)的 BigDecimal
System.out.println("bigDec1 * bigDec2 = " + sum.toString());
// 除法运算:整数商
sum = bigDec1.divideToIntegralValue(bigDec2); // 返回值为(bigDec1/bigDec2)整数结果的 BigDecimal
System.out.println("bigDec1 / bigDec2 = " + sum.toString());
// 除法运算:商+余数
BigDecimal[] sums = bigDec1.divideAndRemainder(bigDec2); // 返回值为(bigDec1/bigDec2)整数结果的 BigDecimal
System.out.println("bigDec1 / bigDec2 = " + sums[0].toString()
+ "\t余数:bigDec1 % bigDec2 = " + sums[1].toString());
// 取余数
sum = bigDec1.remainder(bigDec2);
System.out.println("bigDec1 % bigDec2 = " + sum.toString());
// 指数
sum = bigDec1.pow(2);
System.out.println("bigDec1 ^ 2 = " + sum.toString());
// 比较两个数是否相等
System.out.println("比较两个数是否相等: " + bigDec1.equals(bigDec2));
// 比较两个数的大小
System.out.println("比较两个数的大小: " + bigDec1.compareTo(bigDec2)
+ " (若小于为-1,等于为0,大于为1)");// 末位数据精度
System.out.println("bigDec1的末位数据精度: " + bigDec1.ulp());
} public static void main(String[] args) {
testBigInteger();
testBigDecimal();
} }

Java大数处理类:BigInteger类和BigDecimal类的更多相关文章

  1. (转)Java大数操作(BigInteger、BigDecimal)

    基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:-(2的31次方) ~ (2的31次方) 减 1最大负数:10000000 00000000 000 ...

  2. 关于Java大数操作(BigInteger、BigDecimal)

    本文目标 可以使用BigInteger操作大整数 可以使用BigDecimal指定小数的保留位数 基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:- ...

  3. 用C# BigInteger实现的BigDecimal类,终于可以直接做四则运算了。

    https://code.google.com/p/dotnet-big-decimal/ 这是个BigDecimal类的开源项目,支持Operators +, - and *. 俺给改了改,加上了除 ...

  4. Java学习——BigInteger类和BigDecimal类

    Java学习——BigInteger类和BigDecimal类 摘要:本文主要学习了用于大数字运算的BigInteger类和BigDecimal类. 部分内容来自以下博客: https://www.c ...

  5. Java BigDecimal和double BigDecimal类

    BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...

  6. Java基础教程——BigDecimal类

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

  7. BigDecimal类

    如果需要精确的计算结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作. //========================================== ...

  8. BigDecimal类(精度计算类)的加减乘除

    BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...

  9. JAVA大数(转)

    1.输入 首先要想输入需要先包括: import java.util.*; 我们需要其中的 Scanner类声明的对象来扫描控制台输入. 针对A+B来说: import java.util.*; pu ...

随机推荐

  1. UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

    混淆了 python2 里边的 str 和 unicode 数据类型. 1. 对需要 str->unicode 的代码,可以在前边写上 import sys reload(sys) sys.se ...

  2. 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)

    解析一个从淘宝传递的JSON (大家如有兴趣可以测试下):{ "tae_item_detail_get_response": { "data": { " ...

  3. BZOJ2466——[中山市选]树

    1.题目大意:给你一棵树,树的每个节点都有一个权值,是0或1,最开始都是0,你可以做一种修改操作,就是把一个节点和它相邻的 节点的权值取反,问最少几次修改能把所有节点的权值变得都是1,最多100个节点 ...

  4. Qt5 任务栏托盘功能实现

    23333 有一阵子没写博客了,研究了挺长时间qt,学到任务栏托盘时简直无语,网上找得到的代码大多是废码,Qt5不支持或者本身就有毛病不能实现却被n多人转来转去的,甚是无语. 简单托盘功能以下在Qt5 ...

  5. webpack的最简单应用,只使用js与css的打包

    首先进行全局安装webpack npm install -g webpack cmd跳转到项目的文件夹,安装webpack npm install --save-dev webpack 接着需要pac ...

  6. IDEA 编译找不到符号,文件却没有错误。

    单独编译提交找不到符号的文件. DIEAA

  7. 史上最详细的CocoaPods安装教程

    虽然网上关于CocoaPods安装教程多不胜数,但是我在安装的过程中还是出现了很多错误,所以大家可以照下来步骤装一下,我相信会很好用. 前言 在iOS项目中使用第三方类库可以说是非常常见的事,但是要正 ...

  8. ADO.NET和ADO.NET Entity Framework

    ADO.NET 3.0 用于访问和操作数据的两个主要组件是 .NET Framework 数据提供程序和 DataSet. .NET Framework 数据提供程序 .NET Framework 数 ...

  9. hdu 5442 (ACM-ICPC2015长春网络赛F题)

    题意:给出一个字符串,长度是2*10^4.将它首尾相接形成环,并在环上找一个起始点顺时针或逆时针走一圈,求字典序最大的走法,如果有多个答案则找起始点最小的,若起始点也相同则选择顺时针. 分析:后缀数组 ...

  10. iOS cannot find folder xcdatamodeld Xcode 7

    今天升级xcode7时发现了个这个编译bug,说是找不到xcdatamodeld. 解决方法如下: I had the same problem. Here are the steps I used ...