首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java BigDecimal 舍入模式(RoundingMode)详解

BigDecimal.divide方法中必须设置roundingMode,不然会报错。...ROUND_UP:向正无穷方向对齐(转换为正无穷方向最接近所需数值) ROUND_DOWN:向负无穷方向对齐 ROUND_CEILING:向原点反方向对齐 ROUND_FLOOR:向原点方向对齐 ROUND_HALF_UP...:“四舍五入”,如果舍弃部分最高位大于等于 5,向正无穷方向对齐,否则向负无穷方向对齐 ROUND_HALF_DOWN:“五舍六入”,如果舍弃部分最高位大于 5,向正无穷方向对齐,否则向负无穷方向对齐...ROUND_HALF_EVEN:“四舍六入五成双”,如果舍弃部分最高位大于等于六,或等于五并且前一位是奇数,向正无穷方向对齐,否则向负无穷方向对齐 ROUND_UNNECESSARY:如果需要舍入

1.7K21
您找到你想要的搜索结果了吗?
是的
没有找到

BigDecimal

我们建议尽可能使用字符串来初始化BigDecimal对象,以避免这种情况发生。 舍入模式 在高精度计算中,舍入可能是必要。...BigDecimal 提供了 RoundingMode 枚举,可以通过该枚举设置舍入模式。在使用BigDecimal进行除法或设置精度时,指定正确舍入模式非常重要。...以下是一些可用舍入模式: RoundingMode.UP - 向远离零方向舍入,即向正无穷大方向舍入 RoundingMode.DOWN - 向靠近零方向舍入,即向负无穷方向舍入 RoundingMode.CEILING...- 向最接近数字舍入,如果与两个相邻数字距离相等,则向最近偶数舍入 RoundingMode.HALF_DOWN - 向最接近数字舍入,如果与两个相邻数字距离相等,则向远离零方向舍入 RoundingMode.HALF_EVEN...- 向最接近数字舍入,如果与两个相邻数字距离相等,则向最近偶数舍入,类似于四舍五入 例如,当我们使用BigDecimal进行除法计算时,应指定一个舍入模式,例如: BigDecimal a =

24720

Double转BigDecimal并保留两位小数出现异常: java.lang.ArithmeticException: Rounding necessary

永远不要在丢弃分数之前增加数字(即截断)。 请注意,此舍入模式永远不会增加计算值大小 public final static int ROUND_CEILING:舍入模式向正无穷大舍入。...请注意,这是在一系列计算中重复应用时最小化累积误差舍入模式。...如果丢弃分数 ≥ 0.5,则行为与ROUND_UP ; 否则,行为与ROUND_DOWN 。 请注意,这是我们大多数人在小学时所教舍入模式。...是常用四舍五入方式 public final static int ROUND_UNNECESSARY:舍入模式断言请求操作具有精确结果,因此不需要舍入。...请注意,此舍入模式永远不会降低计算值大小。。

63620

BigDecimal加减乘除计算

舍入模式) 可以看到舍入模式有很多种BigDecimal.ROUND_XXXX_XXX, 具体都是什么意思呢 计算1÷3结果(最后一种ROUND_UNNECESSARY在结果为无限小数情况下会报错...4、ROUND_FLOOR 接近负无穷大舍入模式。 如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同; 如果为负,则舍入行为与 ROUND_UP 相同。...注意,此舍入模式始终不会增加计算值。 5、ROUND_HALF_UP 向“最接近”数字舍入,如果与两个相邻数字距离相等,则为向上舍入舍入模式。...6、ROUND_HALF_DOWN 向“最接近”数字舍入,如果与两个相邻数字距离相等,则为上舍入舍入模式。...7、ROUND_HALF_EVEN 向“最接近”数字舍入,如果与两个相邻数字距离相等,则向相邻偶数舍入

1.5K20

不掌握这些坑,你敢用BigDecimal吗?

第三:设置精度坑 在项目中看到好多同学通过BigDecimal进行计算时不设置计算结果精度和舍入模式,真是着急人,虽然大多数情况下不会出现什么问题。...如果 BigDecimal 为正,则舍入行为与 ROUNDUP 相同;如果为负,则舍入行为与 ROUNDDOWN 相同。注意,此舍入模式始终不会减少计算值。...RoundingMode.FLOOR:接近负无穷大舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUNDDOWN 相同;如果为负,则舍入行为与 ROUNDUP 相同。...注意,此舍入模式始终不会增加计算值。 RoundingMode.HALF_UP:向“最接近”数字舍入,如果与两个相邻数字距离相等,则为向上舍入舍入模式。...RoundingMode.HALF_DOWN:向“最接近”数字舍入,如果与两个相邻数字距离相等,则为上舍入舍入模式。

1.3K10

java 中对 BigDecimal 类使用详解

: ,这边我们要避免这个错误产生,在进行除法运算时候,针对可能出现小数产生计算,必须要多传两个参数 divide(BigDecimal,保留小数点后几位小数,舍入模式) 6.1 舍入模式 ROUND_CEILING...//向正无穷方向舍入 ROUND_DOWN //向零方向舍入 ROUND_FLOOR //向负无穷方向舍入 ROUND_HALF_DOWN //向(距离)最近一边舍入,除非两边...() 需要对BigDecimal进行截断和四舍五入可用setScale方法 第一个参数是 设置 保留几位小数 第二个参数是 设置舍入模式 ROUND_CEILING //向正无穷方向舍入...ROUND_DOWN //向零方向舍入 ROUND_FLOOR //向负无穷方向舍入 ROUND_HALF_DOWN //向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样...“四舍五入” ROUND_UNNECESSARY //计算结果是精确,不需要舍入模式 ROUND_UP //向远离0方向舍入 8 总结 (1)商业计算使用BigDecimal

1.1K30

Java四舍五入保留两位小数

Java四舍五入保留两位小数 一、前言 环境 开发工具:IntelliJ IDEA JDK:1.8 二、正文 BigDecimal RoundingMode 算法 说明 ROUND_UP 舍入模式从零舍入...ROUND_DOWN 舍入模式向零舍入 ROUND_CEILING 舍入模式向正无穷大舍入 ROUND_FLOOR 舍入模式向负无穷大舍入 HALF_UP 舍入模式向“最近邻居”舍入,除非两个邻居是等距...,在这种情况下向上舍入 HALF_DOWN 舍入模式向“最近邻居”舍入,除非两个邻居是等距,在这种情况下向下舍入 HAIL_EVEN 舍入模式向“最近邻居”舍入,除非两个邻居是等距,在这种情况下...,向偶数邻居舍入 UNNECESSARY 舍入模式断言所请求操作具有精确结果,因此不需要舍入 代码 double num = 3333.445555; // BigDecimal BigDecimal...bigDecimal = new BigDecimal(num); bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP); System.out.println

1.1K20

BigDecimal使用总结

1.创建对象 使用new方式创建BigDecimal对象 BigDecimal a = new BigDecimal("100");//字符串构造 另外建议数值运算使用字符串方式创建对象,因为:...舍入模式参数") 其中舍入参数: ROUND_CEILING //向正无穷方向舍入 ROUND_DOWN //向零方向舍入 ROUND_FLOOR //向负无穷方向舍入 ROUND_HALF_DOWN...//向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 ROUND_HALF_EVEN //向(距离)最近一边舍入,除非两边...(距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说“四舍五入” ROUND_UNNECESSARY //计算结果是精确,不需要舍入模式 ROUND_UP...//向远离0方向舍入

81730

java 四舍五入运算_JAVA正确四舍五入方法「建议收藏」

大家好,又见面了,我是你们朋友全栈君。 在JDK版本为1.8情况运行下面的代码,会发现很神奇情况(见运行结果)。...向绝对值最大方向舍入,只要舍弃位非0即进位。 2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小方向输入,所有的位都要舍弃,不存在进位情况。...Math.round()方法就是使用此模式。 4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。...若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。 5、 HALF_UP:最近数字舍入(5进)。这是我们最经典四舍五入。...6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃。 7、 HAIL_EVEN:银行家舍入法。

1.3K30

BigDecimal

第二个参数表示小数点后保留位数 第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,有下面这几种: ROUND_CEILING //向正无穷方向舍入 ROUND_DOWN //...向零方向舍入 ROUND_FLOOR //向负无穷方向舍入 ROUND_HALF_DOWN //向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为...1.5 ROUND_HALF_EVEN //向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN...ROUND_HALF_UP //向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6 ROUND_UNNECESSARY //计算结果是精确...,不需要舍入模式 ROUND_UP //向远离0方向舍入 按照各自需要,可传入合适第三个参数。

96210

java保留两位小数

setMaximumFractionDigits(int digits)  digits 显示数字位数  为格式化对象设定小数点后显示最多位,显示最后位是舍入 import java.text...BigDecimal介绍 BigDecimal是Java提供一个不变、任意精度有符号十进制数对象。...向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 static int ROUND_HALF_EVEN           Rounding...向(距离)最近一边舍入,除非两边(距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6 static int ROUND_UNNECESSARY           Rounding...计算结果是精确,不需要舍入模式 static int ROUND_UP           Rounding mode to round away from zero. 向远离0方向舍入

6.1K20

基础类型BigDecimal简介

) 计算 this / divisor 指定标度 如果需要舍入则会使用指定模式进行舍入   应该使用 divide(BigDecimal, int, RoundingMode...()) divideToIntegralValue(BigDecimal divisor, MathContext mc) 返回 BigDecimal其值为 (this / divisor) 整数部分准确商值整数部分与舍入模式无关所以舍入模式不影响此方法返回值首选标度是...-1996 中定义核心算法(根据上下文设置进行舍入) BigDecimal abs()求绝对值其标度为 this.scale() BigDecimal abs(MathContext mc)求绝对值根据上下文设置进行舍入...) BigDecimal(根据上下文设置进行舍入)。...(+this) BigDecimal(根据上下文设置进行舍入)方法效果与 round(MathContext) 方法效果相同 BigDecimal round(MathContext mc)等同于

1.7K41
领券