zoukankan      html  css  js  c++  java
  • java 加减乘除错误

    有次做一个for循环(1000次左右),做的事情也是很简单的事情,就是   Double testValue = (long类型 / 8 ) * long类型 的一些加减乘除操作,

    但是总是出现一些数据算的不对,大部分出现数据丢失了,出现了这样一个情况 (100/8)* 60 本来等于750 ,在for中却是720 。

    写个Uitls类吧,使用BigDecimal处理。这个Utils可以继续add的。

    package com.sencloud.dh.core.utils;
    
    import java.math.BigDecimal;
    
    /**
     * 算法工具类
     * <一句话功能简述>
     * <功能详细描述>
     * 
     * @author  xutianlong
     * @version  [版本号, Aug 9, 2013]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    public class AlgorithmUtil
    {
        private static final int DEF_DIV_SCALE = 10;
    
        /**
         * * 两个Double数相加 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
        public static Double add(Double v1, Double v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.add(b2).doubleValue();
        }
    
        /**
         * * 两个Double数相加 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
        public static Double add(Long v1, Long v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.add(b2).doubleValue();
        }
    
        /**
         * * 两个Double数相减 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
    
        public static Double sub(Double v1, Double v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.subtract(b2).doubleValue();
        }
    
        /**
         * * 两个Double数相乘 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
        public static Double mul(Double v1, Double v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.multiply(b2).doubleValue();
        }
        
        /**
         * * 两个数相乘 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
        public static Double mul(Double v1, Long v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.multiply(b2).doubleValue();
        }
    
        /**
         * * 两个Double数相除 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
    
        public static Double div(Double v1, Double v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        /**
         * * 两个Double数相除 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
    
        public static Double div(Double v1, Long v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        /**
         * * 两个Long数相除 *
         * 
         * @param v1 *
         * @param v2 *
         * @return Double
         */
    
        public static Double div(Long v1, Long v2)
        {
            BigDecimal b1 = new BigDecimal(v1.toString());
            BigDecimal b2 = new BigDecimal(v2.toString());
            return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        
    
        /**
         * * 两个Double数相除,并保留scale位小数 *
         * 
         * @param v1 *
         * @param v2 *
         * @param scale *
         * @return Double
         */
    
        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(v1.toString());
    
            BigDecimal b2 = new BigDecimal(v2.toString());
    
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    
        }
    
    }
    



  • 相关阅读:
    笔记:npm常见错误
    微信小程序ES6方法Promise封装接口
    vuex的Store简单使用过程
    vue-cli输入命令vue ui没效果
    uni-app项目导入第三方组件库muse-ui
    记录:拷贝gitblit里的项目使用git命令clone、pull、push等,出现一直在加载,卡住没反应的问题
    html2canvas脚本实现将html内容转换canvas内容
    记录解决phpStudy报出403Forbidden问题的方法
    gulp报错task function must be specified
    随想
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3249199.html
Copyright © 2011-2022 走看看