首页 > 其他分享 >数字精度运算工具类

数字精度运算工具类

时间:2024-01-10 16:11:07浏览次数:23  
标签:运算 return BigDecimal num2 double param 数字 精度 num1

package com.dem.ceshiDemo.util;

import java.math.BigDecimal;
import java.util.regex.Pattern;

/**
 * 数字精度运算工具类
 */
public class NumberUtils {

	/**
	 * 减法运算(精度)
	 * @param num1 被减数
	 * @param num2 减数
	 * @return 差
	 *
	 */
	public static double subtract(double num1, double num2) {
		BigDecimal bignum1 = new BigDecimal(Double.toString(num1));
		BigDecimal bignum2 = new BigDecimal(Double.toString(num2));
		return bignum1.subtract(bignum2).doubleValue();
	}

	/**
	 * 加法运算(精度)
	 * @param num1 
	 * @param num2
	 * @return 两个数字之和
	 *
	 */
	public static double add(double num1, double num2) {
		BigDecimal bignum1 = new BigDecimal(Double.toString(num1));
		BigDecimal bignum2 = new BigDecimal(Double.toString(num2));
		return bignum1.add(bignum2).doubleValue();
	}
	
	/**
	 * 除法运算(精度)
	 * @param num1 被除数
	 * @param num2 除数
	 * @return 商
	 *
	 */
	public static double divide(double num1, double num2) {
		BigDecimal big1 = new BigDecimal(Double.toString(num1));
		BigDecimal big2 = new BigDecimal(Double.toString(num2));
		return big1.divide(big2).doubleValue();
	}
	
	/**
	 * 除法运算(精度),并保留小数位数
	 * @param num1 被除数
	 * @param num2 除数
	 * @param scale 保留小数位数
	 * @return 商
	 *
	 */
	public static double divide(double num1, double num2, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException(" 截取位数必须是正整数或者零 ");
		}

		BigDecimal big1 = new BigDecimal(Double.toString(num1));
		BigDecimal big2 = new BigDecimal(Double.toString(num2));
		return big1.divide(big2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 乘法运算(精度)
	 * @param num1 被乘数
	 * @param num2 乘数
	 * @return 积
	 *
	 */
	public static double multiply(double num1, double num2) {
		BigDecimal big1 = new BigDecimal(Double.toString(num1));
		BigDecimal big2 = new BigDecimal(Double.toString(num2));
		return big1.multiply(big2).doubleValue();
	}

	/**
	 * 乘法运算(精度),并保留小数位数
	 * @param num1 被乘数
	 * @param num2 乘数
	 * @param scale 保留小数位数
	 * @return 积
	 *
	 */
	public static double multiply(double num1, double num2, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException(" 截取位数必须是正整数或者零  ");
		}
		BigDecimal big1 = new BigDecimal(Double.toString(num1));
		BigDecimal big2 = new BigDecimal(Double.toString(num2));
		return big1.multiply(big2).setScale(scale, BigDecimal.ROUND_HALF_UP)
				.doubleValue();
	}
	
	/**
	 * 数字取整
	 * @param num1 待处理的数字
	 * @return 去掉小数位后的数值
	 *
	 */
	public static double integer(double num1){
		return Math.floor(num1);
	}

	/**
	 * 数字进行四舍五入
	 * @param num1 待处理的数字
	 * @param scale 位数
	 * @return 四舍五入后的数字
	 *
	 */
	public static double round(double num1, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException("截取位数必须是正整数或者零 ");
		}
		BigDecimal b = new BigDecimal(Double.toString(num1));
		return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/*方法二:推荐,速度最快
	 * 判断是否为整数
	 * @param str 传入的字符串
	 * @return 是整数返回true,否则返回false
	 */

	public static boolean isInteger(String str) {
		Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
		return pattern.matcher(str).matches();
	}

}

标签:运算,return,BigDecimal,num2,double,param,数字,精度,num1
From: https://www.cnblogs.com/lichangben/p/17956717

相关文章

  • 数字化转型浪潮中的挑战与机遇:企业如何应对七大难点_光点科技
    随着技术的日益进步,企业数字化转型已成为推动商业模式创新和运营优化的关键。尽管数字化转型提供了无限的可能性,但过程中的难点同样不容小觑。下面,我们将逐一剖析企业转型中的七大难点,并提供相应的应对策略。战略与执行的有效衔接企业往往在战略制定和执行落地之间存在脱节。为确保......
  • 写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中
    描述写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)数据范围:1\len\le1000\1≤n≤1000输入描述:第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。输出描述:......
  • 数据资产入表:工业数字化新机遇
    来源:中国工业新闻网作者:工业互联网周刊副主编耿鹏飞1月1日,《企业数据资源相关会计处理暂行规定》(以下简称《暂行规定》)正式实施。企业数据资产入表迈出了“从0到1”的关键一步。数据是数字化、智能化的“成果”,也是驱动数字化、智能化的“要素”。数据资产入表,意味着工业数字化迎......
  • 建筑业的数字化转型该怎么做?
    什么是数字化转型?数字化是将物理世界转化为数字世界,并将数字世界融入物理世界。数字化转型的本质就是将数字化技术与实际业务的深度融合,即通过技术和业务、管理等的变革来改变或替换现有的业务管理流程,着眼解决业务问题。数字化的好处举个生活中的例子:过去银行转账,要到柜台填......
  • 阿里云“云创月汇,数智营销Go!”开启,带你玩转数字化营销
    阿里云一直致力于为中小企业提供更加普惠的算力、先进的技术以及优质的服务。基于此,在“云+AI”的时代背景下,阿里云在中小企业平台推出“云创月汇”系列活动,聚焦中小企业经营场景,助力中小企业全栈上云,用好新一代AI技术,提高企业经营效率。2024年1月份,“云创月汇”首期——数字化营销......
  • 【案例分析】如何实现高精度无线同步控制矿山爆破?
    随着现代社会工业化进程的不断加快,人们对于矿山开采的规模和速度要求越来越高。为了快速推进矿山的开采作业,人们对于炸药威力的要求越来越高。考虑到生产、运输和存储等各个方面的安全性以及国家有关方面的强制要求,雷管的火药填装量是有严格限制的,不允许随意加大。因此人们转而采用......
  • 在Unity中使用动捕数据实时驱动3D数字人,让3D内容创作更简单
    Unity引擎和UE引擎,是当今使用人数最多的游戏引擎软件之一,它们被广泛用于游戏开发、虚拟现实、增强现实和其他交互式3D应用程序的开发。DSFUN-Unity插件能够帮助开发者更便捷地在Unity平台中利用动捕数据进行高效创作,提升项目效率。一、插件放入当前项目文件夹下将资源包包放入unit......
  • “用友-旭阳数智化联合团队”荣获“2023数字化践行者基石奖”
    近日,由极客邦科技双数研究院联合长城战略咨询、培训杂志共同发起,中国信通院“铸基计划”、德勤中国、TGO鲲鹏会作为评审机构的「2023数字化践行者年度力量榜」评选结果揭晓。“用友-旭阳数智化联合团队”荣获“2023数字化践行者基石奖”。「2023数字化践行者年度力量榜」旨在发掘并......
  • 数字化时代下的数字化资产及其治理 |京东云技术团队
    1什么是数字化资产维克托·迈尔·舍恩伯格在《大数据时代》中提到:“虽然数据还没有被列入企业的资产负债表,但这只是一个时间问题。”数据资源将和土地、人力、资金等生产要素一样,成为企业的资产。业界对于数据资产的定义是企业或组织拥有或控制的,能在未来带来经济利益的数据资源。......
  • 5G基站节能及数字化管理解决方案
    截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为了运营商们亟待解决的问题。5G基站的高能耗从2G时代开始,通信网络能耗不断攀升,用户......