文档章节

BigDecimal的加减乘除

zhdan
 zhdan
发布于 2016/03/09 22:59
字数 482
阅读 15
收藏 0
import java.math.BigDecimal;
public class PreciseCompute {
 // 默认除法运算精度
 p
rivate static final int DEF_DIV_SCALE = 3;
 /**
  * 提供精确的加法运算。
  * 
  * @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();
 }
 /**
  * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后3位,以后的数字四舍五入。
  * 
  * @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 ne = new BigDecimal("1");
  return b.divide(ne, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
 }
 
 

 public static void main(String[] args)throws Exception{
  System.out.println(PreciseCompute.round(new Double(0.33333), 2));
  System.out.println(PreciseCompute.div(new Double(7.5), new Double(7)));
  System.out.println(PreciseCompute.mul(new Double(7.5), new Double(0.7)));
 }
}

© 著作权归作者所有

zhdan
粉丝 5
博文 34
码字总数 13824
作品 0
深圳
私信 提问
BigDecimal -- 商业计算中避免丢失精度

先说结论,商业计算中,一定要用 BigDecimal 的 String 构造器。 1.普通计算,加减乘除及结果: 显然这是不符合我们的计算预期的,在货币结算的时候会引起重大事故。 2. 引入 BigDecimal 直接...

imbiao
2018/09/12
0
0
BigDecimal加减乘除

java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val) Translates a double into a BigDecimal. 第二种:BigDecimal(String v...

帅的不像男的
2018/01/20
0
0
BigDecimal类的加减乘除

BigDecimal类型(+ - * /)所用的属性 11.10 BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDe...

zkool
2012/12/18
0
0
BigDecimal加减乘除运算

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

永爱619
2015/08/27
0
0
Java BigDecimal详解

一、引言 借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而...

JackieYeah
2014/03/05
0
7

没有更多内容

加载失败,请刷新页面

加载更多

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
2
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
4
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
3
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0
今天的学习

今天学到了<select></select>标签: <label for="unittype">Select unit type: </label><select id="unittype" name="unittype" autofocus > <option value="1"> Miner </option> ......

墨冥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部