Math类使用记录
1. Math类中包含的三角函数方法说明
方 法 |
说 明 |
返回值类型 |
sin(double a) |
返回角的三角正弦 |
double |
cos(double a) |
返回角的三角余弦 |
double |
tan(double a) |
返回角的三角正切 |
double |
asin(double a) |
返回一个值的反正弦 |
double |
acos(double a) |
返回一个值的反余弦 |
double |
atan(double a) |
返回一个值的反正切 |
double |
toRadians(double angdeg) |
将角度转换为弧度 |
double |
toDegrees(double angrad) |
将弧度转换为角度 |
double |
2.double类型的加减乘除:
double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型,整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可
/** * 以下是摘抄的BigDecimal方法: */ import java.io.Serializable; import java.math.BigDecimal; import org.springframework.stereotype.Component; @Component public class DoubleUtil implements Serializable { private static final long serialVersionUID = -3345205828566485102L; // 默认除法运算精度 private static final Integer DEF_DIV_SCALE = 2; /** * 提供精确的加法运算。 */ public Double add(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.add(b2).doubleValue(); } /** * 提供精确的减法运算。 */ public double sub(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.subtract(b2).doubleValue(); } /** * 提供精确的乘法运算。 */ public Double mul(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.multiply(b2).doubleValue(); } /** * 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。 */ public Double div(Double dividend, Double divisor, Integer scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b1 = new BigDecimal(Double.toString(dividend)); BigDecimal b2 = new BigDecimal(Double.toString(divisor)); return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /** * 提供精确的小数位四舍五入处理。 */ public Double round(Double value, Integer scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b = new BigDecimal(Double.toString(value)); BigDecimal one = new BigDecimal("1"); return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } }
java直接输出一个double类型的数据时,默认是按科学计数法输出,此时如果想与其他数据进行比较的时候,就比较麻烦了。
因此,如果能手动设置输出的模式,就比较方便了。有两种方式
//1、格式化输出,代码如下: public class TestDouble2String { public static void main(String[] args) { Double double1 = 123456789.111111111111111; DecimalFormat decimalFormat = new DecimalFormat("#,##0.00");// 格式化设置 System.out.println("格式输出:" + decimalFormat.format(double1)); System.out.println("默认输出:" + double1); } } //2、借用BigDecimal类进行输出,代码如下: public class TestDouble2String { public static void main(String[] args) { double d = 123456789.2222222222222222; System.out.println("默认输出:" + d); System.out.println("格式输出:" + BigDecimal.valueOf(d)); } }