javaBigDecimal精度问题
参考⽂章:
问题:同⼀组数据前后运算结果不⼀致
BigDecimal为我们做浮点数运算提供了便利,但是也要注意其精度问题,特别是在做乘法除法运算之时
精度设置⽅法
setScale(int newScale, RoundingMode roundingMode)
第⼀个参数保留到⼩数点后⼏位,第⼆个参数为进位⽅式
只有在作除法运算或四舍五⼊时才⽤到舍⼊模式,有下⾯这⼏种:
ROUND_UP :向远离零的⽅向舍⼊。舍弃⾮零部分,并将⾮零舍弃部分相邻的⼀位数字加⼀。
ROUND_DOWN :向接近零的⽅向舍⼊。舍弃⾮零部分,同时不会⾮零舍弃部分相邻的⼀位数字加⼀,采取截取⾏为。
ROUND_CEILING :向正⽆穷的⽅向舍⼊。如果为正数,舍⼊结果同ROUND_UP⼀致;如果为负数,舍⼊结果同ROUND_DOWN ⼀致。注意:此模式不会减少数值⼤⼩。
ROUND_FLOOR :向负⽆穷的⽅向舍⼊。如果为正数,舍⼊结果同ROUND_DOWN⼀致;如果为负数,舍⼊结果同ROUND_UP⼀致。注意:此模式不会增加数值⼤⼩。
ROUND_HALF_UP :向“最接近”的数字舍⼊,如果与两个相邻数字的距离相等,则为向上舍⼊的舍⼊模式。如果舍弃部分>= 0.5,则舍⼊⾏为与ROUND_UP相同;否则舍⼊⾏为与ROUND_DOWN相同。这种模式也就是我们常说的我们的“四舍五⼊”。
bigdecimal除法保留小数ROUND_HALF_DOWN :向“最接近”的数字舍⼊,如果与两个相邻数字的距离相等,则为向下舍⼊的舍⼊模式。如果舍弃部分> 0.5,则舍⼊⾏为与ROUND_UP相同;否则舍⼊⾏为与ROUND_DOWN相同。这种模式也就是我们常说的我们的“五舍六⼊”。
ROUND_HALF_EVEN :向“最接近”的数字舍⼊,如果与两个相邻数字的距离相等,则相邻的偶数舍⼊。如果舍弃部分左边的数字奇数,则舍⼊⾏为与 ROUND_HALF_UP 相同;如果为偶数,则舍⼊⾏为与 ROUND_HALF_DOWN 相同。注意:在重复进⾏⼀系列计算时,此舍⼊模式可以将累加错误减到最⼩。此舍⼊模式也称为“银⾏家舍⼊法”,主要在美国使⽤。四舍六⼊,五分两种情况,如果前⼀位为奇数,则⼊位,否则舍去。
ROUND_UNNECESSARY :断⾔请求的操作具有精确的结果,因此不需要舍⼊。如果对获得精确结果的操作指定此舍⼊模式,则抛出ArithmeticException。
按照各⾃的需要,可传⼊合适的第⼆个参数。四舍五⼊采⽤ ROUND_HALF_UP
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论