Java的简单类型进行精确的浮点数运算

原创 2004年09月20日 14:03:00
由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入。

import java.math.BigDecimal;

public class Arith {
  //默认除法运算精度
  private static final int DEF_DIV_SCALE = 10;

  //这个类不能实例化
  private Arith(){
  }

  /**
   * 提供精确的加法运算。
   * @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();
  }
}

Java简单类型进行精确浮点数运算

由于Java的简单类型不能够精确的对浮点数进行计算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入。 import java.math.BigDecimal;public class Arit...
  • feng_sundy
  • feng_sundy
  • 2005年08月25日 12:22
  • 1325

关于不能够精确的对浮点数进行运算的问题

http://edu.eoe.cn/   在线课堂 昨天看到一篇帖子说了几个很明显的简单的浮点的运算,计算机都会算错。我引过来给大家看看:‘运行代码: System.out....
  • dyllove98
  • dyllove98
  • 2013年04月13日 14:28
  • 3211

浮点数的相关运算Java实现

计算机处理浮点数不像普通的整数那样,直接通过简单的加减乘除就能办到,这里涉及到一个精度问题,这里举个例子:在java里面如果要比较两个浮点数是否相等,不能单纯的使用“=”来比较,通常会设定一个精度,比...
  • lynnlovemin
  • lynnlovemin
  • 2016年07月21日 10:28
  • 2668

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

public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。 */ // 默认除法运...
  • ZM_Crazy
  • ZM_Crazy
  • 2015年04月25日 17:10
  • 1116

JAVA中精确的浮点运算

java中浮点运算对于很多值浮点数都是采用其能够表示的离目标值最近的数来表示,这有可能会在计算中带来不易觉察的误差。 如下所例: public class ssss { public st...
  • qq7342272
  • qq7342272
  • 2011年08月07日 11:00
  • 6826

<转>JAVA精确的浮点数运算

/** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ public class Arith{ //默认除法运算精...
  • jinzhencs
  • jinzhencs
  • 2017年07月10日 17:21
  • 176

用java存oracle数据库的date类型精确到秒【java.sql.Date 和java.util.Date的区别】

文章来源:http://llying.iteye.com/blog/128068 java.sql.Date sd; java.util.Date ud ;              ud =...
  • buster2014
  • buster2014
  • 2015年01月09日 18:53
  • 2114

JAVA简单类型与对象类型(复杂类型)

Java中int和Integer的区别 Java各种数据类型详细介绍及其区别 基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。 Java中的简单类型从概念上分为四种:实数、整数、...
  • qq861138181
  • qq861138181
  • 2017年02月07日 10:45
  • 1751

[00302]执行精确的浮点数运算

执行精确的浮点数运算一、 解决问题 需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现 二、解决方案 decimal 模块 三、代码说明#!/usr/bin/env pthonfro...
  • ab_xue
  • ab_xue
  • 2017年01月16日 11:03
  • 84

浮点数运算原理详解

导读:浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。 许多人使用float/double进行货币计算时经常会...
  • Darlingqiang
  • Darlingqiang
  • 2018年01月13日 14:13
  • 81
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java的简单类型进行精确的浮点数运算
举报原因:
原因补充:

(最多只允许输入30个字)