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));  
    }  
}  
原文地址:https://www.cnblogs.com/zyanrong/p/11027801.html