位置:首页 » 文章/教程分享 » Guava LongMath类

LongMath提供long基础类型的实用方法。

类声明

以下是com.google.common.math.LongMath类的声明:

@GwtCompatible(emulated=true)
public final class LongMath
   extends Object


方法

S.N. 方法及说明
1 static long binomial(int n, int k)
返回n个选择K,也称为n和k,或为Long.MAX_VALUE的二项式系数,如果long结果不相符。
1 static long checkedAdd(long a, long b)
返回a和b的总和,只要它不会溢出。
2 static long checkedMultiply(long a, long b)
返回a和b的产物,只要它不会溢出。
3 static long checkedPow(long b, int k)
返回b的第k幂,只要它不会溢出。
4 static long checkedSubtract(long a, long b)
返回a和b的差,只要它不会溢出。
5 static long divide(long p, long q, RoundingMode mode)
返回除以p由q,使用指定的RoundingMode四舍五入的结果。
6 static long factorial(int n)
返回n!,也就是说,前n个正整数的乘积,如果n==则返回1,或为Long.MAX_VALUE如果结果long不相符。
7 static long gcd(long a, long b)
返回a, b的最大公约数。
8 static boolean isPowerOfTwo(long x)
返回true,如果x代表两个幂。
9 static int log10(long x, RoundingMode mode)
返回基数为10的对数x,根据指定的舍入模式圆形。
10 static int log2(long x, RoundingMode mode)
返回基数为2-对数x,根据指定的舍入模式圆形。
11 static long mean(long x, long y)
返回x和y的算术平均值,四舍五入向负无穷大。
12 static int mod(long x, int m)
返回x模m,一个非负的值小于m以下。
13 static long mod(long x, long m)
返回x模m,一个非负的值小于m以下。
14 static long pow(long b, int k)
返回b为第k幂。
15 static long sqrt(long x, RoundingMode mode)
返回x的平方根,大概指定的舍入模式。

方法继承

这个类继承了以下类方法:

  • java.lang.Object

LongMath 示例

使用所选择的任何编辑器创建下面的java程序 C:/> Guava

GuavaTester.java
import java.math.RoundingMode;
import com.google.common.math.LongMath;

public class GuavaTester {

   public static void main(String args[]){
      GuavaTester tester = new GuavaTester();
      tester.testLongMath();
   }

   private void testLongMath(){
      try{
         System.out.println(LongMath.checkedAdd(Long.MAX_VALUE, Long.MAX_VALUE));
      }catch(ArithmeticException e){
         System.out.println("Error: " + e.getMessage());
      }

      System.out.println(LongMath.divide(100, 5, RoundingMode.UNNECESSARY));
      try{
         //exception will be thrown as 100 is not completely divisible by 3 thus rounding
         // is required, and RoundingMode is set as UNNESSARY
         System.out.println(LongMath.divide(100, 3, RoundingMode.UNNECESSARY));
      }catch(ArithmeticException e){
         System.out.println("Error: " + e.getMessage());
      }

      System.out.println("Log2(2): "+LongMath.log2(2, RoundingMode.HALF_EVEN));

      System.out.println("Log10(10): "+LongMath.log10(10, RoundingMode.HALF_EVEN));

      System.out.println("sqrt(100): "+LongMath.sqrt(LongMath.pow(10,2), RoundingMode.HALF_EVEN));

      System.out.println("gcd(100,50): "+LongMath.gcd(100,50));

      System.out.println("modulus(100,50): "+LongMath.mod(100,50));

      System.out.println("factorial(5): "+LongMath.factorial(5));
   }
}

验证结果

使用javac编译器编译如下类

C:\Guava>javac GuavaTester.java

现在运行GuavaTester看到的结果

C:\Guava>java GuavaTester

看到结果。

Error: overflow
20
Error: mode was UNNECESSARY, but rounding was necessary
Log2(2): 1
Log10(10): 1
sqrt(100): 10
gcd(100,50): 50
modulus(100,50): 0
factorial(5): 120