Java中的BigDecimal比较大于小于等于,四舍五入保留几位(setScale方法详解),加减乘除取余
本文主要讲解BigDecimal的比较运算,保留精度和取整和基础运算,BigDecimal与其他数据类型转换。
文章目录
- 比较运算
- 保留精度及取整
- 取整(保留0位小数)
- 保留精度
- 基础运算
- BigDecimal与其他数据类型转换
比较运算
比较num1是否大于num2
public static boolean gt(@NotNull BigDecimal num1, BigDecimal num2) {return num1.compareTo(num2) > 0;}
比较num1是否小于num2
public static boolean lt(@NotNull BigDecimal num1, BigDecimal num2) {return num1.compareTo(num2) < 0;}
比较num1是否大于等于num2
public static boolean ge(@NotNull BigDecimal num1, BigDecimal num2) {return num1.compareTo(num2) >= 0;}
比较num1是否小于等于num2
public static boolean le(@NotNull BigDecimal num1, BigDecimal num2) {return num1.compareTo(num2) <= 0;}
比较num1是否等于num2
public static boolean eq(@NotNull BigDecimal num1, BigDecimal num2) {return num1.compareTo(num2) == 0;}
保留精度及取整
核心主要是 setScale(int newScale, int roundingMode)
方法。
主要是两个参数:
newScale
为小数位数;roundingMode
为取舍模式;
取整(保留0位小数)
/*** 取整返回int 类型* @param num1* @param roundingMode* @return*/public static int intValue(@NotNull BigDecimal num1,int roundingMode) {return num1.setScale(SCALA_ZERO, roundingMode).intValue();}
取整时setScale(int newScale, int roundingMode)
第一个参数为0,第二个为取舍模式。
各个roundingMode详解如下:
ROUND_UP
:正数时,舍弃小数后(整数部分)加1,比如100.39结果为100。负数时,舍弃小数后(整数部分)减去1,-100.39结果为 -101。ROUND_DOWN
:直接舍弃小数。ROUND_CEILING
:如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作 (取附近较大的整数)。ROUND_FLOOR
: 如果 BigDecimal 是正的,则做 ROUND_DOWN 操作;如果为负,则做 ROUND_UP 操作(取附近较小的整数)。ROUND_HALF_UP
:四舍五入(取更近的整数)。ROUND_HALF_DOWN
:同ROUND_HALF_UP 差别仅在于0.5时会向下取整。ROUND_HALF_EVEN
:取最近的偶数。ROUND_UNNECESSARY
:不需要取整,如果存在小数位,就抛ArithmeticException 异常。
保留精度
四舍五入保留几位小数
/*** 四舍五入保留几位小数* @param scala 保留几位* @param num1 对应数值* @return*/public static float halfUpValue(@NotNull BigDecimal num1,int scala) {return num1.setScale(scala, BigDecimal.ROUND_HALF_UP).floatValue();}
指定取舍规则,保留几位小数
/*** 指定取舍规则,保留几位小数* @param scala 保留几位* @param num1 对应数值* @param roundingMode 取舍规则* @return*/public static BigDecimal roundingModeValue(@NotNull BigDecimal num1,int scala,int roundingMode) {/*** setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3* setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4* setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4* setScale(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍*/return num1.setScale(scala, roundingMode);}
基础运算
主要是以下方法:
加:BigDecimal add(BigDecimal augend)
减:BigDecimal subtract(BigDecimal subtrahend)
乘:BigDecimal multiply(BigDecimal multiplicand)
除:BigDecimal divide(BigDecimal divisor)
取余:BigDecimal[] divideAndRemainder(BigDecimal divisor)
,返回一个BigDecimal数组,返回数组中包含两个元素,第一个元素为两数相除的商,第二个元素为余数。
BigDecimal与其他数据类型转换
四舍五入保留几位小数返回字符串
/*** 四舍五入保留几位小数返回字符串* @param tScala 保留几位* @param num1 对应数值* @param tRoundingMode 舍入类型* @return*/public static String toPlainString(@NotNull BigDecimal num1, int tScala, int tRoundingMode) {return num1.setScale(tScala, tRoundingMode).toPlainString();}
四舍五入保留两位小数返回double类型
/*** 四舍五入保留两位小数返回double类型* @param num1* @return*/public static double doubleValue(@NotNull BigDecimal num1) {return num1.setScale(SCALA_TWO, BigDecimal.ROUND_HALF_UP).doubleValue();}
其他转换类似:floatValue()、 longValue() 、intValue()…。
本文内容到此结束了,
如有收获欢迎点赞Java中的BigDecimal比较大于小于等于,四舍五入保留几位(setScale方法详解),加减乘除取余相关推荐
- java中多线程之CAS(compareAndSet),Unsafe类大白话详解.
java中多线程之CAS(compareAndSet),Unsafe类大白话详解 什么是CAS CAS原理 Unsafe类: 什么是CAS 比较并交换 在学习CAS之前,我们先了解一下JMM. ...
- BigDecimal中divide方法与setScale方法详解
BigDecimal中divide方法详解 1.首先说一下用法,BigDecimal中的divide主要就是用来做除法的运算.其中有这么一个方法. public BigDecimal divide(B ...
- java解析日志数据_Java实时监控日志文件并输出的方法详解
Java实时监控日志文件并输出的方法详解 想在前台显示数据同步过程中产生的日志文件,在网上找到解决方案,做了代码测试好用.这里做个记录 java.io.RandomAccessFile可以解决同时向文 ...
- java 查询sql语句_java执行SQL语句实现查询的通用方法详解
完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...
- 编程实现linux中的who命令功能,Linux who命令简介及使用方法详解
玩蛇网推荐图文教程:python 列表 本文是关于Linux who命令简介及使用方法详解一文.如果你是一名系统管理员,可能需要需要在一个特定的时间点都有谁活跃在系统上.以便必须严密监视我们的服务器. ...
- java中的getnumber怎么用_java安全编码指南之:Number操作详解
简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...
- java中for的常规用法_Java for循环的几种用法详解
本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方 ...
- Java中的微信支付(1):API V3版本签名详解
1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的 API 已经发展到V3版本,采用了流行的 Restful 风格. 微信支付V2 ...
- java中byte装箱和装箱_Java包装类、拆箱和装箱详解
虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备"对象"的特性--不携带属性.没有方法可调用. 沿用它们只是为了迎合 ...
最新文章
- 论COSPLAY / 谨以此文纪念我暂短的Cos生涯
- 直播 | 顾险峰教授讲座:对抗生成网络的几何理论解释
- 开发日记-20190911 关键词 C代码实现shell ftw命令
- Cloud for Customer custom BO创建时间随着行项目数量增加而增加的关系
- .NET 现代化动态 LINQ 库 Gridify
- 【HDU2896】病毒侵袭——ac自动机
- Java 异常处理机制
- 使用promise解决回调地狱_「每日一题」Promise 是什么?
- zuul zuul2 性能_我们学习如何构建Zuul CI / CD云
- Exp3 免杀原理与实践 20164314
- [原创]UUID的介绍和使用
- 读《暗时间》,学会思考
- c语言中sub指令,sub指令(汇编语言sub用法)
- catia二次开发:人机交互select,start command
- 解决pychram:卡在Updating Python Interpreter
- 中点和中值滤波的区别_【传感器融合】扩展卡尔曼滤波的逐步理解与实现(上)...
- 常用颜色的RGB值及中英文名称对照表
- 分数化成有限小数的方法_分数化小数的方法|小数化分数题目
- 认识和选用常用的几种 GPRS 模块(转)
- 没有如愿的人生,只有幸福的生活
热门文章