📅  最后修改于: 2023-12-03 15:01:05.317000             🧑  作者: Mango
Guava是由Google开发的一个Java库,为Java语言及Android平台提供了丰富的实用工具类。其中也包括数学实用程序,本文将着重介绍这部分内容。
Guava提供了一个常数类(DoubleMath)用于计算与浮点数相关的常数,包括E、PI等。
double e = DoubleMath.e();
double pi = DoubleMath.PI;
Guava提供了一些常用的取整和舍入的方法,如四舍五入、向上取整、向下取整等等。
double n = 3.1415926;
long rounded = DoubleMath.roundToLong(n, RoundingMode.DOWN); // 向下取整
long ceiling = DoubleMath.ceil(n); // 向上取整
long floor = DoubleMath.floor(n); // 向下取整
在进行浮点数运算时,精确度可能有问题,此时我们需要将其转换成BigDecimal来处理。
double x = 0.015;
double y = 0.035;
double z = x + y;
BigDecimal bigDecimal = DoubleMath.roundToDouble(z, RoundingMode.DOWN);
System.out.println(bigDecimal); // 0.049
对于幂运算,可以利用Java自带的Math库,但是存在一些问题。例如,1.1的20次方在Java中计算可能会得到不正确的结果。
double x = 1.1;
double result = Math.pow(x, 20);
System.out.println(result); // 6.386026669305536E8
而Guava的DoubleMath库则提供了pow方法,可以得到正确的结果。
double x = 1.1;
double result = DoubleMath.pow(x, 20);
System.out.println(result); // 6.191736422399746E8
除上述方法外,Guava还提供了其他一些数学实用方法,如判断一个数是否为2的整数次幂、获取两个数的最大公约数等等。
// 判断一个数是否为2的整数次幂
boolean isPowerOfTwo = DoubleMath.isPowerOfTwo(16);
// 获取两个数的最大公约数
int gcd = IntMath.gcd(100, 150);