BigDecimal加减乘除运算工具类

BigDecimal加减乘除运算工具类BigDecimal加减乘除运算工具类

大家好,又见面了,我是你们的朋友全栈君。

import java.math.BigDecimal;   

/** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */  
public class Arith{ 
    
	//默认除法运算精度 
	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();   
	}   
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137300.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows部署apache_win7下ftp服务器搭建

    windows部署apache_win7下ftp服务器搭建======================更新时间2019年5月6日=====================更新内容:增加操作系统及VC++的版本要求======================更新时间2019年4月19日=====================更新内容:Apache版本更新到2.4.39,修改配置文件更加简单,只需一步。原始的2.4.2…

    2025年8月24日
    5
  • Python进制转换和补零「建议收藏」

    Python进制转换和补零「建议收藏」1、补零1)字符串python中有一个zfill方法用来给字符串前面补0,非常有用n=”123″s=n.zfill(5)asserts==”00123″zfill()也可以给负数补0n=”-123″s=n.zfill(5)asserts==”-0123″2)数字补零通过格式化的方式来补0n=123s=”%05d”…

    2022年5月12日
    315
  • WiFi频段_wifi工作频段

    WiFi频段_wifi工作频段我们知道wifi2.4G和5G是一个电磁波承载的信息。那莫他们各自所能用到的最大资源是多少呢?2.4G->2.4GHz~2.485GHz共83.5MHz的资源,我们频道的划分是以五Mhz为一个channel资源。5G->一般从5170~52505250~53305490~57305735~5835其中5170~5250是36~485250~5330是52~645490~5730是100~1445735~58…

    2022年10月20日
    1
  • iptable 链表「建议收藏」

    iptable 链表「建议收藏」iptable五链4表PREROUTING的规则可以存在于:raw表,mangle表,nat表。INPUT的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。FORWARD的规则可以存在于:mangle表,filter表。OUTPUT的规则可以存在于:raw表mangle表,nat表,filter表。POSTROUTING的规则可以存在于:mangle表,n

    2022年5月28日
    33
  • TerminateProcess函数简单使用示例[通俗易懂]

    TerminateProcess顾名思义,就是终止进程的意思。是WindowsAPI的函数,示例代码如下://Demo.cpp:定义控制台应用程序的入口点。//终止进程Demo#include”stdafx.h”usingnamespacestd;//@param:dwpid:指定需要关闭的进程pidintCloseProcess(DWORDdwpi…

    2022年4月7日
    118
  • linux读写锁_共享内存读写锁

    linux读写锁_共享内存读写锁一、读写锁是什么?读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的ps:读写锁本质上是一种自旋锁二、为什么需要读写锁?有时候,在多线程中,有一些公共数据修改的机会比较少,而读的机会却是非常多的,此公共数据的操作基本都是读,如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源…

    2022年8月12日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号