8、数学

java.lang.Math

提供了一系列静态方法用于科学计算。

常用方法

绝对值、最大最小值

绝大部分方法都有重载,支持intlongfloatdouble

求整

java.math.BigInteger

BigInteger可以表示不可变的任意精度的整数。提供java.lang.Math的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位操作以及一些其他操作。

构建实例

// 利用字符串创建
BigInteger b1 = new BigInteger("1");
// 利用long创建
BigInteger b2 = BigInteger.valueOf(1L);

常用方法

java.math.BigDecimal

BigDecimal表示不可变、任意精度的浮点数,一般的Float类和Double类可以用来做科学计算或工程计算。但在商业计算中,要求数字精度比较高,故用到BigDecimal类。BigDecimal类支持不可变的、任意精度的有符号十进制定点数。

构建实例

// long
BigDecimal d1 = BigDecimal.valueOf(1L);
// double
BigDecimal d2 = BigDecimal.valueOf(1.2);
// long
BigDecimal d3 = new BigDecimal(1L);
// double
BigDecimal d4 = new BigDecimal(1.2);
// String
BigDecimal d5 = new BigDecimal("1.2");

常用方法

java.text.DecimalFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、浮点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。

常见符号

0

0出现在整数部分,表示整数位数最少0的个数,少了就补0

DecimalFormat format = new DecimalFormat("000");
System.out.println(format.format(99)); //099
System.out.println(format.format(9999)); //9999

0出现在小数部分,表示小数位数必须0的个数,如果多了就会四舍五入,少了就会补0

DecimalFormat format = new DecimalFormat("0.000");
System.out.println(format.format(99.99)); //99.990
System.out.println(format.format(99.9999)); //100.000

#出现在整数部分,并不会有格式化

DecimalFormat format = new DecimalFormat("#");
System.out.println(format.format(99)); //99
System.out.println(format.format(9999)); //9999

#出现在小数部分,表示最多为#的个数,如果少了不会补0,如果多了就四舍五入

DecimalFormat format = new DecimalFormat("#.###");
System.out.println(format.format(99.99)); //99.99
System.out.println(format.format(99.9999)); //100

%

%的作用是将小数转换为百分比形式,搭配0#可以格式化结果

DecimalFormat format = new DecimalFormat("#.##%");
System.out.println(format.format(0.8999)); //89.99%
System.out.println(format.format(0.89999)); //90%

其他用法

// 每三位使用,分割。注意只能使用 , 才会有分割效果
System.out.println(new DecimalFormat(",###").format(899677566)); // 899,677,566
// 嵌入自定义文本
System.out.println(new DecimalFormat("value is : #.###").format(3.1415)); // value is : 3.142
// 保留整数
System.out.println(new DecimalFormat("#").format(3.14)); // 3