3.求a的b次幂:Math.pow();
public static double pow(double a, double b)
pow是power的缩写。power的意思是幂。
与之容易混淆的是a<<b,表示的是a*(2的b次方)。
5.四舍五入取整:Math.round();
public static int round(float a) public static long round(double a)
注意,float型取整后是int型,而double取整后是long型。
6.浮点数格式化,保留n位小数。自己封装方法,要用到DecimalFormat类,这个类是专门用来格式化小数的,decimal就是小数的意思
/** * * 把一个浮点数四舍五入保留n位小数 * * @param a * @param n * @return double */ public static double numberKeepN(double a, int n) { String pattern = "0."; for (int i = 0; i < n; i++) { pattern = pattern + "0"; } DecimalFormat df = new DecimalFormat(pattern); String value = df.format(a); double k = Double.valueOf(value); return k; } /** * * 整数a、b相除,保留n位小数 * * @param a * @param b * @param n * @return */ public static double dividKeepN(long a, long b, int n) { String pattern = "0."; for (int i = 0; i < n; i++) { pattern = pattern + "0"; } DecimalFormat df = new DecimalFormat(pattern); String value = df.format((double) a / b); double k = Double.valueOf(value); return k; }
需要注意的是,整数和浮点数进行运算可能会丢失精度,得到的结果与期望值不符,比如
double a = 0.5755;double b = 100 + a;double c = 100 - a;double d = 100 * a;double e = 100 / a;System.out.println(b);// 100.5755System.out.println(c);// 99.4245System.out.println(d);// 57.550000000000004System.out.println(e);// 173.7619461337967
本来100*0.5755应该等于57.55的,但结果却是57.550000000000004,令人大吃一惊!
如果要对浮点数进行运算的话,应该用BigDecimal类。
得到一个BigDecimal实例的方式有两种:
用BigDecimal(String val)构造器,例如
BigDecimal decimal1 = new BigDecimal("0.5755");
注意,不要用BigDecimal(double val),这个构造器可能产生意想不到的问题。
或者用BigDecimal的静态方法BigDecimal.valueOf(double val),例如
BigDecimal decimal2 = BigDecimal.valueOf(100);
这样就可以调用BigDecimal的API进行浮点数的加减乘除运算了,如:
BigDecimal decimal3 = decimal1.multiply(decimal2);System.out.println(decimal3);// 57.5500
之后再用BigDecimal的doubleValue()或者toString()方法得到double类型值或者浮点数格式的字符串,然后再根据需求格式化即可:
double d3 = decimal3.doubleValue();d3 = (numberKeepN(d3, 1));