BigDecimal基本加减乘除

2024-05-30 13:20

本文主要是介绍BigDecimal基本加减乘除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、BigDecimal类

在Java中,BigDecimal类提供了对超过16位有效位的数进行精确运算的能力。它不能直接使用传统的+、-、*、/等算术运算符,而是必须调用其相应的方法来进行运算。这些方法包括

加法:使用add()方法。
减法:使用subtract()方法。
乘法:使用multiply()方法。
除法:使用divide()方法,该方法允许设置精确度和舍入模式来控制计算结果的精度和舍入规则。

二、工具类

代码如下:

package com.common.utils;import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;/*** BigDecimal工具类*/
public class BigDecimalUtils {private static final BigDecimal hundred = new BigDecimal(100);private static final BigDecimal thousand = new BigDecimal(10000);/*** 转换String保留2位*/public static String genTransString(BigDecimal num) {if (num == null) {num = BigDecimal.ZERO;} else {num = num.setScale(2,BigDecimal.ROUND_HALF_UP);}return num.stripTrailingZeros().toPlainString();}/*** 转换为亿元保留2位,返回String*/public static String genMillon(BigDecimal num) {if (num == null) {num = BigDecimal.ZERO;} else {num = num.divide(thousand,2,BigDecimal.ROUND_HALF_UP);}return num.stripTrailingZeros().toPlainString();}/*** 相除,转换为亿元保留2位,返回String*/public static String genMillonTwo(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}if (compare(num2)) {return BigDecimal.ZERO.toPlainString();} else {num1 = num1.divide(thousand,4,BigDecimal.ROUND_HALF_UP);num2 = num2.divide(thousand,4,BigDecimal.ROUND_HALF_UP);return num1.divide(num2,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString();}}/*** String类型的万元转换为亿元* @return*/public static String genMillonString(String num) {BigDecimal bd;if (ObjectUtils.isNotEmpty(num)) {bd = new BigDecimal(num);} else {bd = BigDecimal.ZERO;}return bd.divide(thousand,2,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();}/*** 相加之和,且四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genAddNum(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}return num1.add(num2).setScale(2,BigDecimal.ROUND_HALF_UP);}/*** 相减之差,且四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genSubtractNum(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}return num1.subtract(num2).setScale(2,BigDecimal.ROUND_HALF_UP);}/*** 相乘之积,且四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genMultiplyNum(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}if (compare(num2)) {return BigDecimal.ZERO;} else {return num1.multiply(num2).setScale(2,BigDecimal.ROUND_HALF_UP);}}/*** int类型数相乘,且四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genIntMultiplyNum(Integer num1, Integer num2) {if (num1 == null) {num1 = 0;}if (num2 == null) {num2 = 0;}if (num2.intValue() == 0) {return BigDecimal.ZERO;} else {return new BigDecimal(num1).multiply(new BigDecimal(num2)).setScale(2,BigDecimal.ROUND_HALF_UP);}}/*** 两数相除,且四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genDivideNum(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}if (compare(num2)) {return BigDecimal.ZERO;} else {return num1.divide(num2,4,BigDecimal.ROUND_HALF_UP);}}/*** 两数相除,且乘100,四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genBigDecimalNum(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}if (compare(num2)) {return BigDecimal.ZERO;} else {return num1.divide(num2,4,BigDecimal.ROUND_HALF_UP).multiply(hundred).setScale(2,BigDecimal.ROUND_HALF_UP);}}/*** 两个int类型数相除,且乘100,四舍五入,保留两位小数,最后转为String类型* @param num1* @param num2* @return*/public static String genIntToStringNum(Integer num1, Integer num2) {if (num1 == null) {num1 = 0;}if (num2 == null) {num2 = 0;}if (num2.intValue() == 0) {return BigDecimal.ZERO.toPlainString();} else {return new BigDecimal(num1).divide(new BigDecimal(num2),4,BigDecimal.ROUND_HALF_UP).multiply(hundred).setScale(2,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();}}/*** 两个int类型数相除,且乘100,四舍五入,保留两位小数* @param num1* @param num2* @return*/public static BigDecimal genIntToBigDecimalNum(Integer num1, Integer num2) {if (num1 == null) {num1 = 0;}if (num2 == null) {num2 = 0;}if (num2.intValue() == 0) {return BigDecimal.ZERO;} else {return new BigDecimal(num1).divide(new BigDecimal(num2),4,BigDecimal.ROUND_HALF_UP).multiply(hundred).setScale(2,BigDecimal.ROUND_HALF_UP);}}/*** 与0相比较,是否相等* @param num* @return*/public static Boolean compare(BigDecimal num) {if (num.compareTo(BigDecimal.ZERO) == 0 ) {return true;} else {return false;}}}

这篇关于BigDecimal基本加减乘除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016261

相关文章

微信小程序开发必知必会:文件结构和基本配置

一、微信小程序基本文件结构 1.  project.config.json:项目的基本配置文件,包括项目名称、appid、项目目录、页面文件夹等。     {"setting": {"urlCheck": false,"es6": true,"postcss": true,"nodeModulesPath": "D:\\\\node_modules"},"appid": "wxd678e

PHP的基本语法有哪些?

PHP的基本语法包括以下几个方面: PHP标记:PHP脚本以<?php开始,以?>结束。这是PHP文件的默认文件扩展名是.php。 变量和常量:变量以$符号开头,其后是变量的名称。常量使用define()函数定义,例如define("常量名", 常量值);。 数据类型:PHP支持多种数据类型,如整型、浮点型、字符串型等。 注释:PHP支持单行注释(用//表示)和多行注释(用/* */表示

SDAutoLayout/UIView+SDAutoLayout.h 的基本使用,记住这4个Api就足够了~

1.1 > leftSpaceToView(self.view, 10) 方法名中带有“SpaceToView”的方法表示到某个参照view的间距,需要传递2个参数:(UIView)参照view 和 (CGFloat)间距数值 1.2 > widthRatioToView(self.view, 1) 方法名中带有“RatioToView”的方法表示view的宽度或者高度等属性相对于参

Eclipse使用git最基本流程

Eclipse使用git最基本流程,eclipsegit流程 git有诸多好处,网上都说的很清楚了,在这里我不再赘述。对于我来说,私下里想做一些项目,而又不能很好的保存自己的代码和进行版本控制,这时候,就用到了git。下面,就以我个人为例讲讲git从0开始如何安装使用。 Step1 准备工作 msysgit,下载地址为http://msysgit.github.io/

CloudStack的基本使用

ISO和模板文件的管理 ISO和模板文件通过HTTP或HTTPS协议上传到二级存储中。CloudStack中的模板分为三种:系统模板,内置模板和用户模板: 系统模板:创建系统虚拟机实例时使用内置模板:CloudStack内置的一组模板,供用户创建客户虚拟机实例用户模板:由平台管理员或用户注册的模板 注册ISO和模板文件 准备一个HTTP服务器,把系统模板和ISO文件上传到服务器上,供Clo

【进阶篇-Day5:JAVA常用API的使用(Math、BigDecimal、Object、包装类等)】

目录 1、API的概念2、Object类2.1 Object类的介绍2.2 Object的toString()方法2.3 Object的equals()方法2.4 Objects概述 3、Math类4、System类5、BigDecimal类6、包装类6.1 包装类的概念6.2 几种包装类(1)手动转换包装类:(2)自动转换包装类:(3)Integet常用方法:(4)练习: 1

JACKSON框架用法基本

JACKSON框架用法基本 之前参与的一个手机项目中和服务器进行交互的数据格式就是JSON,在手机端用JACKSON进行数据和java bean之间的转换。这次专业课的结课作业需要手机应用和服务器交互,我就想用JSON传递数据,用JACKSON来进行解析,特此总结一下。 简介 JACKSON是一个多用途的java库,来解析JSON格式的数据,用途很广。 解析JSON的三种方式 St

BigDecimal 小数位的处理(RoundingMode)

前言: 在日常项目开发中,接触小数是常有的事情,而产品对于小数的处理,在不同的业务中有不同的定义,比如四舍五入、截取、向上舍位、向下舍位等等场景,面对如此多的场景,你是否会束手无策?或者说自己去研究怎么实现?其实 Java 已经给我们提供了一个枚举类 RoundingMode,RoundingMode 共有 8 种舍位方式,本篇我们来逐个分析。 RoundingMode 枚举类源码如下: p

ARC学习(3)基本编程模型认识(三)

笔者来介绍arc的编程模型的中断流程和异常流程 1、中断介绍 主要介绍一下中断进入的流程,包括需要配置的寄存器等信息。 中断号:16-255,总共240个中断。触发类型:脉冲或者电平触发中断优先级:16个,0最大,15最小。中断向量表地址:地址0x400对齐,因为中断+异常的地址总共大小占用0x400的字节中断向量大小:32位 1.1 中断配置流程 配置全局优先级阈值,STATUS

selenium Python自动化测试(基本的键盘事件)

#coding=utf-8 ''' Created on 2015-5-10 @author: user ''' ''' 几种常用的键盘指令: send_keys(Keys.BACK_SPACE) 删除键(BackSpace) send_keys(Keys.SPACE) 空格键(Space) send_keys(Keys.TAB) 制表