Java大数处理类:BigInteger类和BigDecimal类
当我们要处理非常大的数据时,平常用的数据类型已不足以表示,在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类的更多相关文章
- (转)Java大数操作(BigInteger、BigDecimal)
基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:-(2的31次方) ~ (2的31次方) 减 1最大负数:10000000 00000000 000 ...
- 关于Java大数操作(BigInteger、BigDecimal)
本文目标 可以使用BigInteger操作大整数 可以使用BigDecimal指定小数的保留位数 基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:- ...
- 用C# BigInteger实现的BigDecimal类,终于可以直接做四则运算了。
https://code.google.com/p/dotnet-big-decimal/ 这是个BigDecimal类的开源项目,支持Operators +, - and *. 俺给改了改,加上了除 ...
- Java学习——BigInteger类和BigDecimal类
Java学习——BigInteger类和BigDecimal类 摘要:本文主要学习了用于大数字运算的BigInteger类和BigDecimal类. 部分内容来自以下博客: https://www.c ...
- Java BigDecimal和double BigDecimal类
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...
- Java基础教程——BigDecimal类
BigDecimal类 float.double类型的数字在计算的时候,容易发生精度丢失. 使用java.math.BigDecimal类可以解决此类问题. 前面讲过Math类,现在的BigDecim ...
- BigDecimal类
如果需要精确的计算结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作. //========================================== ...
- BigDecimal类(精度计算类)的加减乘除
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...
- JAVA大数(转)
1.输入 首先要想输入需要先包括: import java.util.*; 我们需要其中的 Scanner类声明的对象来扫描控制台输入. 针对A+B来说: import java.util.*; pu ...
随机推荐
- SQL Server 查询、搜索命令、语句
--查询所有表 SELECT NAME,* FROM SYSOBJECTS WHERE XTYPE='U' order by SYSOBJECTS.name --查询所有存储过程 select * f ...
- EasyUI中Dialog的使用
$(function () { $('<div id="dlgContent"></div>').appendTo($('body')); $('#dlgC ...
- 新建Oracle数据库时,提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序
新建一个oracle数据库时,当提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序等字样的时候,问题是那个监听的服务没有启动,解决方法如下: 打开cmd命 ...
- UNTIY3D接入91SDK的办法
原地址: http://bbs.18183.com/thread-111324-1-1.html UNITY3D接入Android-SDK 方法一:把UNITY3D游戏打成安卓项目文件,修改安卓项目文 ...
- 回归基础: JavaScript 变量提升
from me: javascript的变量声明具有hoisting机制,它是JavaScript一个基础的知识点,也是一个比较容易犯错的点,平时在开发中,大大小小的项目都会遇到. 它是JavaScr ...
- Android中对Log日志文件的分析[转]
一,Bug出现了, 需要“干掉”它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你会看bug, a ...
- dp重拾-01背包--HDU 2602
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like ...
- 11.6---矩阵查找元素(CC150)
思路,一旦提到查找就要想到二分查找. public static int[] findElement(int[][] a, int n, int m, int key) { // write code ...
- 【Other】Ubuntu 14.04 pptp 客户端连接配置
sudo apt-get install pptp-linux binutils modprobe ppp_mppe sudo pptpsetup --create testvpn --server ...
- mongoengine
http://docs.mongodb.org/ecosystem/drivers/python/ http://www.cnblogs.com/holbrook/archive/2012/03/11 ...