金额的数据类型是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.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.ArithmeticException` - **解释**:执行算术运算时发生错误时抛出,如除以零。 - *...
"BigDecimal.js.zip"是一个压缩包,其中包含了"BigDecimal-all-last.min.js"文件。这个文件是BigDecimal.js库的最小化(minified)版本,旨在减小代码体积,提高网页加载速度。"min.js"通常表示经过压缩和混淆处理,...
### Java API文档重要知识点概述 #### 一、Java API概览 Java API是Java应用程序接口(Application Programming Interface)的简称,它提供了一系列预定义的类和接口,支持开发者构建复杂的应用程序。Java API覆盖...
- **异常概述**:`NullPointerException`是Java中最常见的运行时异常之一,它发生在试图访问一个为`null`的对象实例时。 - **典型场景**: - 尝试调用对象的方法或访问其属性,但该对象引用为`null`。 - 尝试获取...
以上就是Java主要包的简述,每个包都为特定的功能或服务提供了必要的类和接口,是Java程序员日常开发中不可或缺的一部分。理解并熟练使用这些包,能够帮助开发者高效地构建出稳定、安全的Java应用程序。
"js_bigdecimal_1_0_1.zip"是一个包含了JavaScript环境下实现BigDecimal功能的库,版本号为1.0.1,据描述,这个库经过了实际测试,证明是有效的。 BigDecimal是一种可以表示任意精度的十进制浮点数的类,主要用于...
- `DECIMAL`、`DOUBLE`、`DOUBLE PRECISION`: 存储浮点数,Java 中使用 `java.lang.Double`。 - `ENUM`: 有限的预定义值集合,Oracle 没有直接对应的数据类型。 - `FLOAT`: 浮点数,Oracle 中有 `FLOAT (24)`,...
Java.lang.Number是Java编程语言中的一个抽象基类,它为所有数值类型提供了基础框架。Number类的主要作用是提供一套通用的方法,将表示的数值转换为不同类型的值,如byte、double、float、int、long和short,这在...
这个文档,"javaApi分类[参考].pdf",显然是一个详细的Java API参考指南,涵盖了多个关键领域,包括用户界面、图形、数据传输、事件处理、输入输出、网络编程、并发控制、安全性、数据库访问以及文本处理等。...
Java是一种广泛使用的编程语言,以其跨平台性和面向对象特性而著名。面试中,Java开发者可能会遇到各种问题,从基础知识到高级概念。以下是一些Java面试题及其答案的概述: 1. **B/S架构与C/S架构**: - **B/S架构...
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 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等
解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal
- `decimal`, `money`, `smallmoney`, `numeric`: 使用 `java.math.BigDecimal` 类来表示。 - `real`: 使用 `java.lang.Float` 类来表示。 #### 4. 布尔值 - **SQL Server 数据库类型**: `bit` - **Java 对应类型...
Java.lang包是Java编程语言的核心库之一,它包含了一些最基础和最重要的类,这些类为所有其他Java程序提供了基本服务。在"JBuider第六章:Java.lang包"的教程中,你可能会深入学习到以下几个关键知识点: 1. **基础...
唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; ...
Hibernate作为一款流行的Java持久层框架,它提供了丰富的数据类型映射功能,使得开发者能够更加灵活地在Java对象和关系型数据库之间进行转换。下面将详细介绍Hibernate中的各种基本数据类型及其在不同数据库中的映射...
6. 浮点型(FLOAT、DOUBLE)及小数型(DECIMAL):分别对应Java中的`java.lang.Float`、`java.lang.Double`以及`java.math.BigDecimal`,JDBC类型分别为7、8、3,适用于需要高精度数值运算的场景。 7. **BOOLEAN**...