文档章节

java double 浮点数计算工具类 加减乘除和四舍五入

秦学强
 秦学强
发布于 2017/07/09 22:04
字数 534
阅读 2
收藏 0
import java.math.BigDecimal;

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

    //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;
    //这个类不能实例化
    private ComputeUtil(){
    }

    /**  * 提供精确的加法运算。  * @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){
        double a = 0.123;
        double b = 0.456;
        System.out.println(a * b);
        System.out.println(ComputeUtil.mul(a,b));

    }

}

本文转载自:http://blog.csdn.net/u014481096/article/details/53487302

共有 人打赏支持
秦学强

秦学强

粉丝 0
博文 69
码字总数 0
作品 0
海淀
程序员
私信 提问
Java Double相加出现的怪事

问题的提出: 编译运行下面这个程序会看到什么 [java] view plaincopy public class test { public static void main(String args[]) { System.out.println(0.05 + 0.01); System.out.print......

onedotdot
2017/11/05
0
0
BigDecimal加减乘除运算

Java代码 import java.math.BigDecimal; /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ public class Arith{ /...

永爱619
2015/08/27
0
0
Java中浮点型数据Float和Double进行精确计算的问题

一、浮点计算中发生精度丢失 大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况。来看下面的...

Junn
2013/06/10
0
1
Java的Arith(用于做小数的精确计算)类是工具类还是需要自己定义??

//请问下面的类使用是都要自己定义吗 public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ //默...

单曲循环shield
2015/08/24
1K
1
Java小白进阶笔记(2)-变量和数据类型

1.Java有多少种数据类型,数据类型的分类? 两种数据类型: 基本数据类型 引用数据类型 除了八种基本数据类型,其他的都是引用数据类型。 2.Java的工作机制? Java程序的源代码(.java)编译...

阿里云云栖社区
2018/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精读《论语》读后感作文3600字

精读《论语》读后感作文3600字: 学而篇第一:子曰:“学而时习之,不亦说乎?有朋友自远方来,不亦悦乎?人不知,而不愠,不亦君子乎? 朱熹解:即学而又时时习之,则学者熟,而衷心喜悦,其...

原创小博客
29分钟前
0
0
CPU内存结构

开局一张图 由于CPU频率太快了,为解决直接读取内存的数据上的延迟,在CPU和内存之间,存在3级缓存。 CPU在解决和缓存不一致上采用两种方式: 缓存一致性协议 总线锁机制 CPU CPU的一个时钟周...

春哥大魔王的博客
32分钟前
1
0
记一次centos 7内核升级事故

情景 公司做等保3测评,在进行系统漏洞检测时发现内核存在漏洞,需要进行升级。 名称 版本 升级前内核 CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) 升级后内核 CentOS Linux (3.10.0-957...

阿dai
57分钟前
8
0
PowerDesigner操作

1.去掉生成DDL里的注释 Database -> Edit Current DBMS -> Script -> Syntax -> BlockComment,去掉BlockComment里面的value内容。...

了凡川
今天
3
0
Django集成Markdown编辑器【附源码】

专注内容写作的你一定不要错过markdown 简单介绍 markdown是一种标记语言,通过简单的标记语法可以使普通的文本内容具有一定的格式,使用非常简单,学习成本极低 目前各大Blog平台都已支持m...

运维咖啡吧
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部