博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 浮点运算
阅读量:5321 次
发布时间:2019-06-14

本文共 4846 字,大约阅读时间需要 16 分钟。

 

CreateTime--2017年12月1日11:35:00

Author:Marydon

java 浮点类型(float、double)间的运算工具类

/** * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类 *  * @author Marydon * @createTime 2017年12月1日上午11:39:15 * @updateTime * @Email:Marydon20170307@163.com * @description 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供了精确的浮点数运算,包括加减乘除和四舍五入。 * @version:1.0.0 */public class ArithmeticUtiles {    /**     * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类     *      * @author wupenghui 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。     */    // 默认除法运算精度    private static final int DEF_DIV_SCALE = 10;    // 这个类不能实例化    private ArithmeticUtiles() {    }    /**     * 提供精确的加法运算     *      * @param v1     *            被加数     * @param v2     *            加数     * @return 两个参数的和     */    public static double add(double v1, double v2) {        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.add(b2).doubleValue();    }    /**     * 提供精确的减法运算     *      * @param v1     *            被减数     * @param v2     *            减数     * @return 两个参数的差     */    public static double sub(double v1, double v2) {        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.subtract(b2).doubleValue();    }    /**     * 提供精确的乘法运算     *      * @param v1     *            被乘数     * @param v2     *            乘数     * @return 两个参数的积     */    public static double mul(double v1, double v2) {        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.multiply(b2).doubleValue();    }    /**     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入     *      * @param v1     *            被除数     * @param v2     *            除数     * @return 两个参数的商     */    public static double div(double v1, double v2) {        return div(v1, v2, DEF_DIV_SCALE);    }    /**     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。     *      * @param v1     *            被除数     * @param v2     *            除数     * @param scale     *            表示表示需要精确到小数点以后几位。     * @return 两个参数的商     */    public static double div(double v1, double v2, int scale) {        if (scale < 0) {            throw new IllegalArgumentException("The scale must be a positive integer or zero");        }        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();    }    /**     * 提供精确的小数位四舍五入处理。     *      * @param v     *            需要四舍五入的数字     * @param scale     *            小数点后保留几位     * @return 四舍五入后的结果     */    public static double round(double v, int scale) {        if (scale < 0) {            throw new IllegalArgumentException("The scale must be a positive integer or zero");        }        BigDecimal b = new BigDecimal(Double.toString(v));        BigDecimal one = new BigDecimal("1");        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();    }    /**     * 提供精确的类型转换(Float)     *      * @param v     *            需要被转换的数字     * @return 返回转换结果     */    public static float convertsToFloat(double v) {        BigDecimal b = new BigDecimal(v);        return b.floatValue();    }    /**     * 提供精确的类型转换(Int)不进行四舍五入     *      * @param v     *            需要被转换的数字     * @return 返回转换结果     */    public static int convertsToInt(double v) {        BigDecimal b = new BigDecimal(v);        return b.intValue();    }    /**     * 提供精确的类型转换(Long)     *      * @param v     *            需要被转换的数字     * @return 返回转换结果     */    public static long convertsToLong(double v) {        BigDecimal b = new BigDecimal(v);        return b.longValue();    }    /**     * 返回两个数中大的一个值     *      * @param v1     *            需要被对比的第一个数     * @param v2     *            需要被对比的第二个数     * @return 返回两个数中大的一个值     */    public static double returnMax(double v1, double v2) {        BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.max(b2).doubleValue();    }    /**     * 返回两个数中小的一个值     *      * @param v1     *            需要被对比的第一个数     * @param v2     *            需要被对比的第二个数     * @return 返回两个数中小的一个值     */    public static double returnMin(double v1, double v2) {        BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.min(b2).doubleValue();    }    /**     * 精确对比两个数字     *      * @param v1     *            需要被对比的第一个数     * @param v2     *            需要被对比的第二个数     *      * @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1     */    public static int compareTo(double v1, double v2) {        BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.compareTo(b2);    }}

 

 

 

转载于:https://www.cnblogs.com/Marydon20170307/p/7941266.html

你可能感兴趣的文章
自建数据源(RSO2)、及数据源增强
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
使用命令创建数据库和表
查看>>
linux下Rtree的安装
查看>>
【转】redo与undo
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
安卓当中的线程和每秒刷一次
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
标识符
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>