`

精确的浮点数运算

 
阅读更多

package com.framework.common.util;

import java.math.BigDecimal;

public class ArithUtil {
      //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;
   
    /**
     * 提供精确的加法运算。
     * @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();
    }
 
   
    public static void main(String[] args) {
        System.out.println(add(219.99,219.99));
    }
}

分享到:
评论

相关推荐

    C语言浮点数运算

    有些C语言书上说float型的有效位数是6~7位,为什么不是6位或者7位?而是一个变化的6~7位? 浮点数在内存中是如何存放的? float浮点数要比同为4... 如何才能精确比较浮点数真实的大小? 看完本文档,你将会得到答案!

    python中实现精确的浮点数运算详解

    计算机智能处理可数集合的运算,但是全体实数是不可数的,所以计算机只能用一些...下面这篇文章主要给大家介绍了关于python中实现精确浮点数运算的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    提供精 确的浮点数运算,包括加减乘除和四舍五入

    由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。

    非精确浮点数乘法器设计

    提出了一种非精确浮点数乘法器的算法设计,同时将该算法应用于高动态范围图片的图像处理中,并将结果与精确浮点数乘法器的应用结果进行对比,结果表明所提出的非精确浮点数乘法器具有很好的性能。

    Python如何执行精确的浮点数运算

    主要介绍了Python如何执行精确的浮点数运算,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    js 浮点数加法运算

    javascript浮点数加法运算精确计算方法,能够有效避免无限循环小数的产生

    使用Vue.js及Element编写的精度浮点运算计算器源码(打开运行)

    由于javascript的浮点运算是不精确的(对于大多数编程语言都是这样),此程序使用整数来代替浮点数进行运算,最后再转化为浮点数,可以实现对设置范围内(运算范围在程序中为自定义变量range)的浮点运算实现精度...

    解决js浮点数运算的精度问题

    在javascript中进行运算的时候经常会出现浮点数的问题,导致运算结果不准确 比如:0.1 + 0.2 = 0.30000000000000004 完整demo及解决方案如下: demo .num-tags, .total-tag { text-align: center; } i { ...

    JS浮点数运算结果不精确的Bug解决

    主要给大家介绍了关于JS浮点数运算结果不精确的Bug解决,文中通过示例代码介绍的非常详细,对大家学习或者使用JS具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    关于Python中浮点数精度处理的技巧总结

    最近在使用Python的时候遇到浮点数运算,发现经常会碰到如下情况: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。 比如说: 0.1是十进制,转化为二进制后它是个无限循环的数: ...

    Python基础语法:数据类型、进制转换、转义字符、字符编码、整数与浮点数运算规则、布尔型运算规则

    本人使用的python版本为:Python 3.7.4 Python中的基本数据类型 整数:和数学上的表示一样,如 1, 3, 100....整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍

    java精确计算浮点数工具类

    Java对浮点数的计算是不精确的,比如0.05+0.01结果不是0.06,而是0.060000000000000005,更有甚者,一个数除以0.0,Java是不会抛异常,而是得出无穷大的结果.本工具类解决了上述问题.该类提供了加减乘除四则运算的精确计算...

    Java与MySQL中小数保存问题解析.pptx.pptx

    在进行浮点数运算时,可能会出现精度丢失的问题,例如0.1+0.2的结果并不等于0.3,而是近似于0.30000000000000004。 数据库字段类型选择 在设计数据库表结构时,需要对涉及小数的字段选择合适的数据类型,如DECIMAL...

    浮点数减法运算

    linux下实现的浮点数精确计算,可以实现小数位借位

    简单谈谈php浮点数精确运算

    如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面我们介绍一下一些常用的BC高精确度函数使用。

    解决JS浮点数运算出现Bug的方法

    37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个... 代码如下://除法函数,用来得到精确的除法结果 /

Global site tag (gtag.js) - Google Analytics