【JavaSE】Java高精度计算类:BigInteger和BigDecimal
2014-12-06 11:31
716 查看
Java提供了两个用于高精度计算的类:BigInteger和BigDecimal,这两个类都在java.math包下。
BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
有两个重要的构造方法:
1.BigInteger(String val)
将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
2.BigInteger(String val, int radix)
将指定基数(进制)的 BigInteger 的字符串表示形式转换为 BigInteger。
基数radix的取值范围为[Character.MIN_RADIX, Character.MAX_RADIX],也即[2, 36]。
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
BigDecimal指定了八种舍入模式(RoundingMode):
关于每种模式的意义请见博文【Java中BigDecimal的8种舍入模式】。
示例:
BigInteger
BigInteger表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
有两个重要的构造方法:
1.BigInteger(String val)
将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
2.BigInteger(String val, int radix)
将指定基数(进制)的 BigInteger 的字符串表示形式转换为 BigInteger。
System.out.println(new BigInteger("110", 2)); System.out.println(new BigInteger("110", 8)); System.out.println(new BigInteger("110", 10)); System.out.println(new BigInteger("110", 16));结果:
6 72 110 272注意,如下语句会抛出错误:
new BigInteger("120", 2);结果:
Exception in thread "main" java.lang.NumberFormatException: For input string: "120"原因是二进制数不包括数字2。
基数radix的取值范围为[Character.MIN_RADIX, Character.MAX_RADIX],也即[2, 36]。
BigDecimal
BigDecimal表示不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
BigDecimal指定了八种舍入模式(RoundingMode):
public final static int ROUND_UP = 0; public final static int ROUND_DOWN = 1; public final static int ROUND_CEILING = 2; public final static int ROUND_FLOOR = 3; public final static int ROUND_HALF_UP = 4; public final static int ROUND_HALF_DOWN = 5; public final static int ROUND_HALF_EVEN = 6; public final static int ROUND_UNNECESSARY = 7;
关于每种模式的意义请见博文【Java中BigDecimal的8种舍入模式】。
示例:
MathContext context = new MathContext(6, RoundingMode.HALF_UP); System.out.println(new BigDecimal(110)); System.out.println(new BigDecimal(110.11, context)); System.out.println(BigDecimal.TEN.divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP));结果:
110 110.110 3.33BigDecimal中定义的舍入模式已过时,Java推荐使用枚举类型RoundingMode。
相关文章推荐
- Java的两个高精度计算的类:BigInteger,BigDecimal
- java 中的大数据类型(BigInteger和BigDecimal)
- JAVA大数处理(BigInteger,BigDecimal)
- java 中的大数据类型(BigInteger和BigDecimal)
- java BigInteger,BigDecimal学习
- Java中BigDecimal 和 BigInteger 类型数据操作学习总结
- 重踏学习Java路上_Day14(正则表达式,Math,Random,System,BigInteger,BigDecimal,Date,Calendar)
- java中biginteger和bigdecimal在大数计算中的使用
- java 中的大数据类型(BigInteger和BigDecimal)
- Java中正则表达式和常用的Math、Random、System、BigInteger、BigDecimal、Date/DateFormat、Calendar类的使用
- 【正整数模板运算(C++手写BigInteger类和java.math.BigInteger以及java.math.BigDecimal)】
- JAVA大数处理(BigInteger,BigDecimal)
- java蓝桥笔记1、BigDecimal,BigInteger,Calendar,GregorianCalendar,ArrayList,List,Vector,Stack,Scanner,Array
- JavaSE----API之常用类(Math、Random、System、BigInteger和BigDecimal、Date和DateFormat、Calendar)
- JAVA大数处理(BigInteger,BigDecimal)
- java 高精度数BigInteger和BigDecimal
- Java基础之BigInteger,BigDecimal
- java 中的大数据类型(BigInteger和BigDecimal)
- JAVA大数处理(BigInteger,BigDecimal)
- Java之------大数(BigInteger,BigDecimal)