zoukankan      html  css  js  c++  java
  • 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));  
        }  
    }  
  • 相关阅读:
    AWTK-MVVM 在 STM32H743 上的移植笔记
    windows 中文 unicode 编码显示
    SpringBoot项目jar包运行
    Activiti中的互斥网关、并行网关、兼容网关、事件网关
    【LeetCode】739.每日温度(5种方法,详细图解)
    【LeetCode】20.有效的括号(使用栈,动图详解)
    你知道权限管理的RBAC模型吗?
    关闭Win10自动更新
    iOS 中如何判断当前是2G/3G/4G/5G/WiFi
    GCD API 记录 (三)
  • 原文地址:https://www.cnblogs.com/zyanrong/p/11027801.html
Copyright © 2011-2022 走看看