BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN的区别
来源:互联网 发布:w网络资源管理系统 编辑:程序博客网 时间:2024/05/01 10:34
BigDecimal.ROUND_HALF_UP
在java jdk的解释为:向“ 最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。
BigDecimal.ROUND_HALF_DOWN
在java jdk的解释为:向“ 最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
这两者的区别主要在于:一个是舍弃部分 >= 0.5,另一个是舍弃部分 > 0.5 什么理解呢?看下面的例子就明白了
public class BigDecimalTest{
public static void main(String[] args){
double num = 100.0555;
BigDecimal b = new BigDecimal(Double.toString(num));
num = b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("sample-->"+num);
}
}
程序的输出结果为:100.056
输出结果为保留三位小数,因为BigDecimal的属性是ROUND_HALF_UP,num的舍弃部分为:0.0005 = 0.5,符合舍弃部分>=0.5,所以会向上进一,如果舍弃部分是0.0004
则不会向上进一。
如果把语句 num = b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
换成:
num = b.setScale(3,BigDecimal.ROUND_HALF_DOWN).doubleValue();
则输出结果为:100.055
因为BigDecimal的属性是ROUND_HALF_DOWN,num的舍弃部分为:0.0005 = 0.5,没有>0.5, 所以不会向上进一,如果舍弃部分是0.00056
就会向上进一。
在java jdk的解释为:向“ 最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。
BigDecimal.ROUND_HALF_DOWN
在java jdk的解释为:向“ 最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
这两者的区别主要在于:一个是舍弃部分 >= 0.5,另一个是舍弃部分 > 0.5 什么理解呢?看下面的例子就明白了
public class BigDecimalTest{
public static void main(String[] args){
double num = 100.0555;
BigDecimal b = new BigDecimal(Double.toString(num));
num = b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("sample-->"+num);
}
}
程序的输出结果为:100.056
输出结果为保留三位小数,因为BigDecimal的属性是ROUND_HALF_UP,num的舍弃部分为:0.0005 = 0.5,符合舍弃部分>=0.5,所以会向上进一,如果舍弃部分是0.0004
则不会向上进一。
如果把语句 num = b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
换成:
num = b.setScale(3,BigDecimal.ROUND_HALF_DOWN).doubleValue();
则输出结果为:100.055
因为BigDecimal的属性是ROUND_HALF_DOWN,num的舍弃部分为:0.0005 = 0.5,没有>0.5, 所以不会向上进一,如果舍弃部分是0.00056
就会向上进一。
- BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN的区别
- BigDecimal 的 ROUND_HALF_UP和ROUND_HALF_DOWN
- BigDecimal ROUND_HALF_DOWN与ROUND_HALF_UP的区别
- BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
- 关于BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
- 关于BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
- 关于BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
- BigDecimal(num).setScale ROUND_HALF_UP四舍五入的问题
- BigDecimal.dive(one,scale,BigDecimal.ROUND_HALF_UP)不能四舍五入!!
- Float、double和Bigdecimal的区别
- BigDecimal和NumberFormat四舍五入的区别
- BigInteger 与 BigDecimal的区别
- BigDecimal
- Bigdecimal
- bigdecimal
- BigDecimal
- BigDecimal
- BigDecimal
- JavaScript世界的一等公民 - 函数
- 跟我轻松学装机
- Raspberry Pi(数莓派)的安装、配制IP及软件源等入门
- 10.1.2013(进制转换)
- myeclipse
- BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN的区别
- JZ2440 U-boot下通过tftp烧写内核文件
- JAVA源码、类和对象三者的关系
- lua实现利用timer实现 sleep:
- oracle10g手工建库步骤
- PHP-redis中文文档
- arp-scan
- 多线程顺序打印ABC
- 支付宝快捷支付与犯罪(包含解决方法)(2013.8.20更新)