Java中的大数据:BigInteger和BigDecimal
2017-09-25 15:34
615 查看
Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。这两个类包含的方法、提供的操作与对基本类型所能执行的操作相似,只不过是以方法调用方式取代运算符方式来实现。等于是用速度换取了精度。
BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。
它们都扩展Number类且实现Comparable接口,可以使用new BigInteger(String)或new BigDecimal(String)来创建实例,使用add,substract,multiple,divide和remainder方法完成算数运算,使用compareTo方法比较两个大数字。
ONE,ZERO,TEN分别代表1,0,10。 其定义类似于:
BigDecimal
除了以上三个常量外还有8个关于舍入的常量,这里不再赘述,可以去查看API的帮助手册。 顺便说一句,BigDecimal由于舍入模式的存在,使得这个类用起来比BigInteger要复杂。
数组定义与基本类型类似。
BigDecimal
BigDecimal的构造函数比BigInteger多一些,感觉用起来更方便些,比如这样定义就是错误的:BigInteger bi = new BigInteger(100);
顺便说一下,java.util包中的Scanner类实现了nextBigInteger()和nextBigDecimal()方法,可以用来读入控制台输入的BigInteger和BigDecimal。
BigDecimal
BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。
它们都扩展Number类且实现Comparable接口,可以使用new BigInteger(String)或new BigDecimal(String)来创建实例,使用add,substract,multiple,divide和remainder方法完成算数运算,使用compareTo方法比较两个大数字。
一、常量
BigIntegerONE,ZERO,TEN分别代表1,0,10。 其定义类似于:
public static final BigInteger ONE = valueOf(1);
BigDecimal
除了以上三个常量外还有8个关于舍入的常量,这里不再赘述,可以去查看API的帮助手册。 顺便说一句,BigDecimal由于舍入模式的存在,使得这个类用起来比BigInteger要复杂。
二、声明赋值
BigIntegerBigInteger bi = new BigInteger(“100”); BigInteger bi = BigInteger.valueOf(100);
数组定义与基本类型类似。
BigDecimal
BigDecimal bd = new BigDecimal(100); BigDecimal bd = BigDecimal.valueOf(100);
BigDecimal的构造函数比BigInteger多一些,感觉用起来更方便些,比如这样定义就是错误的:BigInteger bi = new BigInteger(100);
顺便说一下,java.util包中的Scanner类实现了nextBigInteger()和nextBigDecimal()方法,可以用来读入控制台输入的BigInteger和BigDecimal。
三、相关函数
BigIntegerimport java.math.BigInteger; import java.util.Random; /* * 测试BigInteger类的一些函数 */ public class BigIntegerDemo { public static void main(String[] args) { System.out.println("构造两个BigInteger对象"); //BigInteger(int numBits,Random rnd) //构造一个随机生成的 BigInteger,它是在 0 到 (2^numBits - 1)(包括)范围内均匀分布的值 BigInteger bi1 = new BigInteger(55,new Random()); System.out.println("bil = " + bi1); //BigInteger(byte[] val) //将包含 BigInteger 的二进制补码表示形式的 byte 数组转换为 BigInteger。 BigInteger bi2 = new BigInteger(new byte[]{3,2,3}); System.out.println("bi2 = " + bi2); //加 System.out.println("bi1 + bi2 = " + bi1.add(bi2)); //减 System.out.println("bi1 - bi2 = " + bi1.subtract(bi2)); //乘 System.out.println("bi1 * bi2 = " + bi1.multiply(bi2)); //指数运算 System.out.println("bi1的2次方 = " + bi1.pow(2)); //整数商 System.out.println("bi1/bi2的整数商: " + bi1.divide(bi2)); //余数 System.out.println("bi1/bi2的余数: " + bi1.remainder(bi2)); //整数商+余数 System.out.println("bi1 / bi2 = " + bi1.divideAndRemainder(bi2)[0] + "--" + bi1.divideAndRemainder(bi2)[1]); System.out.println("bi1 + bi2 = " + bi1.add(bi2)); //比较大小,也可以用max()和min() if(bi1.compareTo(bi2) > 0) { System.out.println("bi1 is greater than bi2"); } else if(bi1.compareTo(bi2) == 0) { System.out.println("bi1 is equal to bi2"); } else if(bi1.compareTo(bi2) < 0) { System.out.println("bd1 is lower than bd2"); } //返回相反数 BigInteger bi3 = bi1.negate(); System.out.println("bi1的相反数:" + bi3); //返回绝对值 System.out.println("bi1的绝对值:" + bi3.abs()); } }
BigDecimal
import java.math.BigDecimal; /* * 测试BigDecimal类的一些函数 */ public class BigDecimalDemo { public static void main(String[] args) { System.out.println("构造两个BigDecimal对象"); //用char[]数组创建BigDecimal对象,第二个参数为位移offset, //第三个参数指定长度 BigDecimal bd1 4000 = new BigDecimal("3464656776868432998434".toCharArray(),2,15); System.out.println("bd1 = " + bd1); //用double类型创建BigDecimal对象 BigDecimal bd2 = new BigDecimal(134258767575867.0F); System.out.println("bd2 = " + bd2); //加 System.out.println("bd1 + bd2 = " + bd1.add(bd2)); //减 System.out.println("bd1 - bd2 = " + bd1.subtract(bd2)); //乘 System.out.println("bd1 * bd2 = " + bd1.multiply(bd2)); //指数运算 System.out.println("bd1的2次方 = " + bd1.pow(2)); //取商的整数部分 System.out.println("bd1/bd2的整数商: " + bd1.divideToIntegralValue(bd2)); //返回余数计算为:this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) //System.out.println(bd1.subtract(bd1.divideToIntegralValue(bd2).multiply(bd2))); System.out.println("bd1/bd2的余数: " + bd1.remainder(bd2)); //取商和余,即bd1.divideToIntegralValue(bd2)与bd1.remainder(bd2) System.out.println("bd1 / bd2 = " + bd1.divideAndRemainder(bd2)[0] + "--" + bd1.divideAndRemainder(bd2)[1]); //比较大小,也可以用max()和min() if(bd1.compareTo(bd2) > 0) System.out.println("bd1 is greater than bd2"); else if(bd1.compareTo(bd2) == 0) System.out.println("bd1 is equal to bd2"); else if(bd1.compareTo(bd2) < 0) System.out.println("bd1 is lower than bd2"); //末位数据精度 System.out.println("bd1的末位数据精度: " + bd1.ulp()); } }
相关文章推荐
- java 中的大数据类型(BigInteger和BigDecimal)
- Java 表示超大型数据和浮点型计算不准确 BigInteger 和 BigDecimal 类介绍
- java 中的大数据类型(BigInteger和BigDecimal)
- java 中的大数据类型(BigInteger和BigDecimal)
- java 中的大数据类型(BigInteger和BigDecimal)
- java 中的大数据类型(BigInteger和BigDecimal)
- java 中的大数据类型(BigInteger和BigDecimal)
- Java中BigDecimal 和 BigInteger 类型数据操作学习总结
- Java核心技术知识点笔记—大数值BigInteger和BigDecimal
- java蓝桥笔记1、BigDecimal,BigInteger,Calendar,GregorianCalendar,ArrayList,List,Vector,Stack,Scanner,Array
- JAVA基础复习十四-Math、Random、System、BigInteger、BigDecimal、Date、SimpleDateFormat类
- JAVA大数处理(BigInteger,BigDecimal)
- java BigInteger和BigDecimal
- Java基础语法<五> 大数值BigInteger BigDecimal
- Java基础 - 正则,Math,Random,System,Date,SimpleDateFormat,Calendar,BigInteger,BigDecimal
- java.math包中的BigInteger和BigDecimal
- Java的两个高精度计算的类:BigInteger,BigDecimal
- 【正整数模板运算(C++手写BigInteger类和java.math.BigInteger以及java.math.BigDecimal)】
- JAVA大数处理(BigInteger,BigDecimal)
- JAVA大数处理(BigInteger,BigDecimal)