java BigDecimal八种舍入模式

一、BigDecimal介绍

  java.math.BigDecimal

  不可变的immutable、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成。

  标度(scale)如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以10的负scale次幂。

  BigDecimal表示的数值是(unscaledValue × 10^-scale)。

与之相关的还有两个类:

  java.math.MathContext:

该对象是封装上下文设置的不可变对象,它描述数字运算符的某些规则,如数据的精度,舍入方式等。

  java.math.RoundingMode:

这是一种枚举类型,定义了很多常用的数据舍入方式。

二、舍入模式

(1)ROUND_UP

舍入远离零的舍入模式。

如:

1.x舍入为2

-1.x 舍入为-2

2、ROUND_DOWN

接近零的舍入模式。

如:

1.x舍入为1

-1.x 舍入为-1

3、ROUND_CEILING

接近正无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;

如果为负,则舍入行为与 ROUND_DOWN 相同。

如:

1.x舍入为2

-1.x 舍入为-1

4、ROUND_FLOOR

接近负无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;

如果为负,则舍入行为与 ROUND_UP 相同。

如:

1.x舍入为1

-1.x 舍入为-2

5、ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

如果舍弃部分xi>= 5,则舍入行为与 ROUND_UP 相同;

xi<5舍入行为与 ROUND_DOWN 相同。

如:

1.4舍入为1

1.5舍入为2

-1.4 舍入为-1

-1.5 舍入为-2

6、ROUND_HALF_DOWN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

如果舍弃部分xi > 5,则舍入行为与 ROUND_UP 相同;

xi <= 5舍入行为与 ROUND_DOWN 相同(五舍六入)。

1.6舍入为2

1.5舍入为1

-1.6 舍入为-2

-1.5 舍入为-1

7、ROUND_HALF_EVEN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入:

如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;

如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况:

前一位为奇数,则入位,否则舍去。

如:

1.6舍入为2

1.5舍入为2

4.5舍入为4

4.4舍入为4

-1.6舍入为-2

-1.5舍入为-2

-6.5舍入为-6

-6.3舍入为-6

8、ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。

如果对非精确结果的操作指定此舍入模式,则抛出ArithmeticException。

如:

4.0舍入为4

4.1舍入 抛出ArithmeticException

时间: 2024-11-06 15:37:51

java BigDecimal八种舍入模式的相关文章

Java中BigDecimal的8种舍入模式是怎样的

Java中BigDecimal的8种舍入模式是怎样的?下面长沙欧柏泰克软件学院和大家一起来学习下吧:  java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以10的负scale次幂. 因此,BigDecimal表示的数值是(unscaledValue × 10-scale). 与之相关的还有两个类: java.ma

Java的三种代理模式简述

本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class Singer{ 2 public void sing(){ 3 System.out.println("唱一首歌"); 4 } 5 } 假如你希望,通过你的某种

JAVA学习篇--JAVA的两种编程模式对比

在Drp项目中,讲解了两种编程模式Model 1和Model2,下面是对这两种模式的简单理解,以及由于Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对比学习一下. Model1 所谓Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应.用少量的JavaBean来处理数据库连接.数据库访问等操作. 代码示例:修改用户信息 主页面的js跳转: function

ST MCU_GPIO的八种工作模式详解。

补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN开漏输出_OUT_OD推挽输出_OUT_PP开漏复用输出_AF_OD推挽复用输出_AF_PP4输入 + 2 输出 + 2 复用输出,一共是8种模式,以下是八种模式的工作原理: GPIO浮空输入_IN_FLOATING模式工作原理以上截图就是浮空输入模式的原理图,图中阴影的部分在浮空输入模式下是处于不

BigDecimal的精度舍入模式详解

BigDecimal舍入模式介绍: 舍入模式在java.math.RoundingMode 里面: RoundingMode.CEILING :向正无限大方向舍入的舍入模式.如果结果为正,则舍入行为类似于 RoundingMode.UP:如果结果为负,则舍入行为类似于 RoundingMode.DOWN.注意,此舍入模式始终不会减少计算值 输入数字 使用CEILING舍入模式将数字舍入为一位数 5.5 6 2.5 3 1.1 2 1.0 1 -1.0 -1 -1.1 -1 -1.6 -1 -2.

【转载】stm32的GPIO八种工作模式

一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.         推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小.效率高.输出既可以向负载灌电流,也可以从负载抽取电流.推拉式输出级既提高电路的负载能力,又提高开关速度. 二.开漏输出:输出端相当于三极管的集电极,要得

Java的三种代理模式

1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理

Java 设计模式(八) Proxy(代理)模式及Spring引申

Proxy 基本概念 代理模式(Proxy pattern)是一种使用率非常高的模式: 为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫作委托模式,它是一项基本设计技巧 Proxy中的角色 Subject(抽象主题类):既可以是抽象类也可以是抽象的接口 RealSubject(具体的主题角色):是被委托角色或者说是被代理角色 Proxy(代理主题角色):是委托类或者代理类: 它负责对真实的角色的应用 把Subject定义的方法限制委托给RealSubject实现 在RealSubjec

Java中三种代理模式

代理模式 代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能. 这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展. 举个例子来说明代理的作用:明星与经纪人之间就是被代理和代理的关系,明星出演活动的时候,明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人) 来解决.这就是代理思想在现实中的一个例子. 静态代理