本文主要讲解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方法详解),加减乘除取余相关推荐

  1. java中多线程之CAS(compareAndSet),Unsafe类大白话详解.

    java中多线程之CAS(compareAndSet),Unsafe类大白话详解 什么是CAS CAS原理 Unsafe类:     什么是CAS 比较并交换 在学习CAS之前,我们先了解一下JMM. ...

  2. BigDecimal中divide方法与setScale方法详解

    BigDecimal中divide方法详解 1.首先说一下用法,BigDecimal中的divide主要就是用来做除法的运算.其中有这么一个方法. public BigDecimal divide(B ...

  3. java解析日志数据_Java实时监控日志文件并输出的方法详解

    Java实时监控日志文件并输出的方法详解 想在前台显示数据同步过程中产生的日志文件,在网上找到解决方案,做了代码测试好用.这里做个记录 java.io.RandomAccessFile可以解决同时向文 ...

  4. java 查询sql语句_java执行SQL语句实现查询的通用方法详解

    完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...

  5. 编程实现linux中的who命令功能,Linux who命令简介及使用方法详解

    玩蛇网推荐图文教程:python 列表 本文是关于Linux who命令简介及使用方法详解一文.如果你是一名系统管理员,可能需要需要在一个特定的时间点都有谁活跃在系统上.以便必须严密监视我们的服务器. ...

  6. java中的getnumber怎么用_java安全编码指南之:Number操作详解

    简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...

  7. java中for的常规用法_Java for循环的几种用法详解

    本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方 ...

  8. Java中的微信支付(1):API V3版本签名详解

    1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的 API 已经发展到V3版本,采用了流行的 Restful 风格. 微信支付V2 ...

  9. java中byte装箱和装箱_Java包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备"对象"的特性--不携带属性.没有方法可调用. 沿用它们只是为了迎合 ...

最新文章

  1. 论COSPLAY / 谨以此文纪念我暂短的Cos生涯
  2. 直播 | 顾险峰教授讲座:对抗生成网络的几何理论解释
  3. 开发日记-20190911 关键词 C代码实现shell ftw命令
  4. Cloud for Customer custom BO创建时间随着行项目数量增加而增加的关系
  5. .NET 现代化动态 LINQ 库 Gridify
  6. 【HDU2896】病毒侵袭——ac自动机
  7. Java 异常处理机制
  8. 使用promise解决回调地狱_「每日一题」Promise 是什么?
  9. zuul zuul2 性能_我们学习如何构建Zuul CI / CD云
  10. Exp3 免杀原理与实践 20164314
  11. [原创]UUID的介绍和使用
  12. 读《暗时间》,学会思考
  13. c语言中sub指令,sub指令(汇编语言sub用法)
  14. catia二次开发:人机交互select,start command
  15. 解决pychram:卡在Updating Python Interpreter
  16. 中点和中值滤波的区别_【传感器融合】扩展卡尔曼滤波的逐步理解与实现(上)...
  17. 常用颜色的RGB值及中英文名称对照表
  18. 分数化成有限小数的方法_分数化小数的方法|小数化分数题目
  19. 认识和选用常用的几种 GPRS 模块(转)
  20. 没有如愿的人生,只有幸福的生活

热门文章

  1. 使用Famo.us 创建高性能移动 UI
  2. 1459. 奶牛体操
  3. postman批量发送请求小记
  4. i5 13500怎么样相当于什么水平级别
  5. 源自神话的写作要义之英雄
  6. 同花顺股票交易接口定义被类实现
  7. React中实现插槽
  8. 数据治理系列:数仓建模之数仓主题与主题域
  9. 推荐10个免费实用的资源网站,值得收藏
  10. 看看清华人是如何学习和生活的