BigDecimal divide除法除不尽报错的问题及解决

目录
  • BigDecimal divide除法除不尽报错
    • 解决办法
  • 关于BigDecimal除法问题
    • BigDecimal做除法时
    • BigDecimal源码

BigDecimal divide除法除不尽报错

用BigDecimal做除法的时候,直接拿起两数怼上除法有时候会出现除不尽就会报错

列如:

BigDecimal a = new BigDecimal(10);
BigDecimal re = a.divide(new BigDecimal(3));
System.out.println(re);

或:

BigDecimal a = new BigDecimal(10);
BigDecimal re = a.divide(new BigDecimal(3)).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(re);

直接这样除是会出现除不尽报错的

解决办法

除的时候直接截取位数就好了

BigDecimal a = new BigDecimal(10);
BigDecimal re = a.divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP);
System.out.println(re);

关于BigDecimal除法问题

BigDecimal做除法时

尽量使用divide(BigDecimal divisor, int scale, int roundingMode),这个方法

divisor:被除数 scale保留小数位数 roundingMode保留小数时采用的方法,一般使用BigDecimal.ROUND_UP(四舍五入)

如果不指定保留小数位数,在遇到除不尽的情况下就会报错

BigDecimal源码

try {
    quotient = this.divide(divisor, mc);
} catch (ArithmeticException e) {
    throw new ArithmeticException("Non-terminating decimal expansion; " +
                                  "no exact representable decimal result.");

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java中BigDecimal的舍入模式解析(RoundingMode)

    目录 BigDecimal的舍入模式(RoundingMode) BigDecimal的常规用法 BigDecimal的舍入模式(RoundingMode) BigDecimal.divide方法中必须设置roundingMode,不然会报错. ROUND_UP:向正无穷方向对齐(转换为正无穷方向最接近的所需数值) ROUND_DOWN:向负无穷方向对齐 ROUND_CEILING:向原点的反方向对齐 ROUND_FLOOR:向原点方向对齐 ROUND_HALF_UP:“四舍五入”,如果舍弃部分

  • Java中BigDecimal,DateFormatter 和迭代器的"陷阱"

    前言: 使用 IDEA 创建一个 Maven 项目 calculate-date-traps 并导入 Junit 依赖. <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> 在进行计费时使

  • SpringBoot解决BigDecimal传到前端后精度丢失问题

    目录 简介 问题描述 实例 问题复现 Java后端BigDecimal的范围 解决方案 方案1:全局处理 方案2:局部处理 简介 本文用示例介绍SpringBoot如何解决BigDecimal传到前端后精度丢失问题. 问题描述 实例 Controller package com.knife.controller; import com.knife.entity.UserVO; import org.springframework.web.bind.annotation.GetMapping; i

  • 使用BigDecimal除法后保留两位小数

    目录 BigDecimal除法后保留两位小数 详细描述 BigDecimal除法异常Non-terminating decimal expansion 异常分析 解决措施 思考 总结 BigDecimal除法后保留两位小数 BigDecimal numBigDecimal=new BigDecimal(5.33); numBigDecimal=ConvertNumber(numBigDecimal,3,2);//调用,5.33/3后保留两位小数1.7766666=1.78 //BigDecima

  • java中BigDecimal用法详解

    首先,学习一个东西,我们都必须要带着问题去学,这边我分为 [为什么?][是什么?][怎么用?] [为什么要用BigDecimal?] 首先,我们先看一下,下面这个现象 那为什么会出现这种情况呢? 因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度. 注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确.只能无限接近于那个值 但是,在项目中,我们不可能让这种情况出现,特别是金融项目,因为涉及金额的计算都必须十分精确

  • Java你不了解的大数型BigInteger与BigDecimal类

    BigInteger类 在Java当中,是有许多数字要进行处理的类,比如Integer类,但是Integer类它也是有上限的.它的最大值就是到2^31-1. 如果我们此时想要表示更大的数,那就用Integer是无法表示的了,所在在Java当中提供了BigInteger类. BigInteger类支持的数字可以说是无限大的,且支持任意精度的整数,也就是说他可以准确的表示任意数值而不会产生丢失的. 在这里也强调一下,因为传入的数型是字符型,所以在做运算的时候,不能使用 + - * / 对应的就是使用

  • BigDecimal divide除法除不尽报错的问题及解决

    目录 BigDecimal divide除法除不尽报错 解决办法 关于BigDecimal除法问题 BigDecimal做除法时 BigDecimal源码 BigDecimal divide除法除不尽报错 用BigDecimal做除法的时候,直接拿起两数怼上除法有时候会出现除不尽就会报错 列如: BigDecimal a = new BigDecimal(10); BigDecimal re = a.divide(new BigDecimal(3)); System.out.println(re

  • Tomcat报错: JDBC unregister 解决办法

     Tomcat报错: JDBC unregister 解决办法 摘要: The web application [web application] registered the JDBC driver [net.sourceforge.jtds.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has be

  • tensorflow 报错unitialized value的解决方法

    Attempting to use uninitialized value mean_squared_error/total 如图: 原因一:使用了tf.metrics.mean_squared_error(labels, predictions) 解决方法: 1.将其换成tf.losses.mean_squared_error(labels, preditions) 或者 2.加一个tf.lacal_variables_initializer() 原因二:将一些节点写在了tf.Session(

  • Javaweb工程运行报错HTTP Status 404解决办法

    最近在学习jsp和servlet,避免不了的要和tomcat打交道,但tomcat经常会出现各式各样的错误,下面是我总结的一些常见的解决方法,希望对大家有用. 1.未部署Web应用 2.URL输入错误 排错方法:首先,查看URL的IP地址和端口号是否书写正确.              其次,查看上下文路径是否正确 Project--------Properties------MyElipse-----Web-----Web Context-root检查这个路径名称是否书写正确.       

  • IDEA连接mysql报错的问题及解决方法

    IDEA连接mysql报错了! 本人之前使用MySQL以及后续使用mybatis和mybatisPlus都是使用sqlyog或者navicat,今天重新学习sql,看到up使用了,idea插件来连接数据库(mysql)也来学习使用了,结果出现一系类问题.本博客开始记录. ---------------------------前进的道路充满荆棘.--------------------------------------------------------------------------- 错

  • 使用MyBatisPlus自动生成代码后tomcat运行报错的问题及解决方法

    自动生成的代码 报错 解决办法:把自动xml文件中自动生成的二级缓存注释掉 总结 到此这篇关于使用MyBatisPlus自动生成代码后tomcat运行报错的问题及解决方法的文章就介绍到这了,更多相关MyBatisPlus自动生成代码tomcat运行报错内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • Spring Boot集成Druid出现异常报错的原因及解决

    Spring Boot集成Druid异常 在Spring Boot集成Druid项目中,发现错误日志中频繁的出现如下错误信息: discard long time none received connection. , jdbcUrl : jdbc:mysql://******?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8, version : 1.2.3, las

  • Spring Boot 2.6.x整合Swagger启动失败报错问题的完美解决办法

    目录 问题 原因 解决方案 方案一(治标) 方案二(治本) 总结 问题 Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错: Failed to start bean ‘ documentationPluginsBootstrapper ‘ ; nested exception… 原因 Springfox 假设 Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Bo

  • Pycharm最全报错的原因与解决方法总结(推荐!)

    目录 前言 (一)Pycharm报错:No R interpreter defined (二)找不到指定的模板:ImportError:DDL load failed while importing ft2font: (三)pycharm中无法识别导入自己写的模块 (四)pycharm光标变粗,无法编辑代码 (五)使用Pycharm给Python程序传递参数 总结 前言 最近在使用Pycharm,在运行或者安装的过程中出现了各种各样的报错,前面已经介绍过安装pygame出现报错的解决方法.文章总

  • Navicat连接mysql报错1251错误的解决方法

    本文为大家分享了Navicat连接mysql报错1251错误的解决方法,供大家参考 错误提示 出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决办法:把mysql用户登录密码加密规则还原成mysql_native_password. 步骤: 1.打开cmd命令窗口,输入命令 mysql -uroot -p 打开MySQL数据库,然后输入密码进行登录. 2.修改加密规则 将加

随机推荐