`

BigDecimal不整除的一个异常java.lang.ArithmeticException: Non-terminating decimal expansi

 
阅读更多

金额的数据类型是BigDecimal 
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:java.lang.ArithmeticException:

 Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)

应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333.... 

解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN) 

在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。

也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal.

四舍五入舍入模式是 BigDecimal.ROUND_HALF_UP 

BigDecimal定义了一下舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,

下面简单介绍,详细请查阅J2se API文档

 

static int

ROUND_CEILING

Rounding mode to round towards positive infinity.

向正无穷方向舍入

static int

ROUND_DOWN

Rounding mode to round towards zero.

向零方向舍入

static int

ROUND_FLOOR

Rounding mode to round towards negative infinity.

向负无穷方向舍入

static int

ROUND_HALF_DOWN

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,

in which case round down.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入,例如1.55保留一位

小数结果为1.5

static int

ROUND_HALF_EVEN

Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant,

in which case, round towards the even neighbor.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,

使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

static int

ROUND_HALF_UP

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,

in which case round up.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位

小数结果为1.6

static int

ROUND_UNNECESSARY

Rounding mode to assert that the requested operation has an exact result, hence no

rounding is necessary.

计算结果是精确的,不需要舍入模式

static int

ROUND_UP

Rounding mode to round away from zero.

向远离0的方向舍入

分享到:
评论

相关推荐

    在Java中异常分析

    - **异常路径**:`java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.ArithmeticException` - **解释**:执行算术运算时发生错误时抛出,如除以零。 - *...

    BigDecimal.js.zip

    "BigDecimal.js.zip"是一个压缩包,其中包含了"BigDecimal-all-last.min.js"文件。这个文件是BigDecimal.js库的最小化(minified)版本,旨在减小代码体积,提高网页加载速度。"min.js"通常表示经过压缩和混淆处理,...

    java API文档

    ### Java API文档重要知识点概述 #### 一、Java API概览 Java API是Java应用程序接口(Application Programming Interface)的简称,它提供了一系列预定义的类和接口,支持开发者构建复杂的应用程序。Java API覆盖...

    java常见异常总结

    - **异常概述**:`NullPointerException`是Java中最常见的运行时异常之一,它发生在试图访问一个为`null`的对象实例时。 - **典型场景**: - 尝试调用对象的方法或访问其属性,但该对象引用为`null`。 - 尝试获取...

    Java各个包简述.pdf

    以上就是Java主要包的简述,每个包都为特定的功能或服务提供了必要的类和接口,是Java程序员日常开发中不可或缺的一部分。理解并熟练使用这些包,能够帮助开发者高效地构建出稳定、安全的Java应用程序。

    js_bigdecimal_1_0_1.zip

    "js_bigdecimal_1_0_1.zip"是一个包含了JavaScript环境下实现BigDecimal功能的库,版本号为1.0.1,据描述,这个库经过了实际测试,证明是有效的。 BigDecimal是一种可以表示任意精度的十进制浮点数的类,主要用于...

    mysql与oracle数据类型对应关系.docx

    - `DECIMAL`、`DOUBLE`、`DOUBLE PRECISION`: 存储浮点数,Java 中使用 `java.lang.Double`。 - `ENUM`: 有限的预定义值集合,Oracle 没有直接对应的数据类型。 - `FLOAT`: 浮点数,Oracle 中有 `FLOAT (24)`,...

    类 java.lang.Number分析

    Java.lang.Number是Java编程语言中的一个抽象基类,它为所有数值类型提供了基础框架。Number类的主要作用是提供一套通用的方法,将表示的数值转换为不同类型的值,如byte、double、float、int、long和short,这在...

    javaApi分类[参考].pdf

    这个文档,"javaApi分类[参考].pdf",显然是一个详细的Java API参考指南,涵盖了多个关键领域,包括用户界面、图形、数据传输、事件处理、输入输出、网络编程、并发控制、安全性、数据库访问以及文本处理等。...

    Java 60道面试题和答案.docx

    Java是一种广泛使用的编程语言,以其跨平台性和面向对象特性而著名。面试中,Java开发者可能会遇到各种问题,从基础知识到高级概念。以下是一些Java面试题及其答案的概述: 1. **B/S架构与C/S架构**: - **B/S架构...

    iBATIS内置别名列表

    10. **decimal**:`java.math.BigDecimal` 11. **object**:`java.lang.Object` 12. **map/hashmap**:`java.util.Map/java.util.HashMap` - `map` 和 `hashmap` 是同义词,表示映射类型。 13. **list/arraylist**...

    java.math.BigDecimal 操作类

    java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等

    Can't find a codec for class java.math.BigDecimal.txt

    解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal

    SQL Server数据库与Java类型对照.doc

    - `decimal`, `money`, `smallmoney`, `numeric`: 使用 `java.math.BigDecimal` 类来表示。 - `real`: 使用 `java.lang.Float` 类来表示。 #### 4. 布尔值 - **SQL Server 数据库类型**: `bit` - **Java 对应类型...

    JBuider第六章:Java.lang包.rar

    Java.lang包是Java编程语言的核心库之一,它包含了一些最基础和最重要的类,这些类为所有其他Java程序提供了基本服务。在"JBuider第六章:Java.lang包"的教程中,你可能会深入学习到以下几个关键知识点: 1. **基础...

    Java 加减乘除工具类(解决精度损失问题)

    唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; ...

    Hibernate数据类型映射及ID

    Hibernate作为一款流行的Java持久层框架,它提供了丰富的数据类型映射功能,使得开发者能够更加灵活地在Java对象和关系型数据库之间进行转换。下面将详细介绍Hibernate中的各种基本数据类型及其在不同数据库中的映射...

    java_mysql_数据类型对照.doc

    6. 浮点型(FLOAT、DOUBLE)及小数型(DECIMAL):分别对应Java中的`java.lang.Float`、`java.lang.Double`以及`java.math.BigDecimal`,JDBC类型分别为7、8、3,适用于需要高精度数值运算的场景。 7. **BOOLEAN**...

Global site tag (gtag.js) - Google Analytics