精华内容
下载资源
问答
  • BigDecimal.ROUND_HALF_XXX的各种用法

     

    在银行、帐户、计费等领域,BigDecimal提供了精确的数值计算。其中8种舍入方式值得掌握。

    1、ROUND_UP

    舍入远离零的舍入模式。

    在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

    注意,此舍入模式始终不会减少计算值的大小。

    2、ROUND_DOWN

    接近零的舍入模式。

    在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

    注意,此舍入模式始终不会增加计算值的大小。

    // 如果为正数
    double a = 1.111111111;
    double b = 9.999999999;
    		
    BigDecimal value1 = BigDecimal.valueOf(a);
    BigDecimal value2 = BigDecimal.valueOf(b);
    
    // setScale 设置精确到小数点后2位
    // 1.12
    System.out.println(value1.setScale(2, BigDecimal.ROUND_UP));
    // 1.11
    System.out.println(value1.setScale(2, BigDecimal.ROUND_DOWN));
    		
    // 10.00
    System.out.println(value2.setScale(2, BigDecimal.ROUND_UP));
    // 9.99
    System.out.println(value2.setScale(2, BigDecimal.ROUND_DOWN));
    
    
    
    // 如果为负数
    double a = -1.111111111;
    double b = -9.999999999;
    		
    BigDecimal value1 = BigDecimal.valueOf(a);
    BigDecimal value2 = BigDecimal.valueOf(b);
    
    // -1.12
    System.out.println(value1.setScale(2, BigDecimal.ROUND_UP));
    // -1.11
    System.out.println(value1.setScale(2, BigDecimal.ROUND_DOWN));
    		
    // -10.00
    System.out.println(value2.setScale(2, BigDecimal.ROUND_UP));
    // -9.99
    System.out.println(value2.setScale(2, BigDecimal.ROUND_DOWN));

    3、ROUND_CEILING

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

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

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

    注意,此舍入模式始终不会减少计算值。

    4、ROUND_FLOOR

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

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

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

    注意,此舍入模式始终不会增加计算值。

    // 如果为正数
    double a = 1.111111111;
    double b = 9.999999999;
    		
    BigDecimal value1 = BigDecimal.valueOf(a);
    BigDecimal value2 = BigDecimal.valueOf(b);
    
    // 1.12
    System.out.println(value1.setScale(2, BigDecimal.ROUND_CEILING));
    // 1.11
    System.out.println(value1.setScale(2, BigDecimal.ROUND_FLOOR));
    		
    // 10.00
    System.out.println(value2.setScale(2, BigDecimal.ROUND_CEILING));
    // 9.99
    System.out.println(value2.setScale(2, BigDecimal.ROUND_FLOOR));
    
    
    
    // 如果为负数
    double a = -1.111111111;
    double b = -9.999999999;
    		
    BigDecimal value1 = BigDecimal.valueOf(a);
    BigDecimal value2 = BigDecimal.valueOf(b);
    
    // -1.11
    System.out.println(value1.setScale(2, BigDecimal.ROUND_CEILING));
    // -1.12
    System.out.println(value1.setScale(2, BigDecimal.ROUND_FLOOR));
    		
    // -9.99
    System.out.println(value2.setScale(2, BigDecimal.ROUND_CEILING));
    // -10.00
    System.out.println(value2.setScale(2, BigDecimal.ROUND_FLOOR));
    

    5、ROUND_HALF_UP

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

    如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

    注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

    6、ROUND_HALF_DOWN

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

    如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

    注意:

    ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 -> 2

    ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 -> 1

    ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.51 -> 2

    ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.51 -> 2

    BigDecimal value1 = new BigDecimal("2.35");
    System.out.println(value1);   // 2.35
    System.out.println(value1.setScale(1, BigDecimal.ROUND_HALF_UP));   // 2.4
    System.out.println(value1.setScale(1, BigDecimal.ROUND_HALF_DOWN)); // 2.35
    
    BigDecimal value2 = new BigDecimal("2.25");
    System.out.println(value2);   // 2.25
    System.out.println(value2.setScale(1, BigDecimal.ROUND_HALF_UP));   // 2.3
    System.out.println(value2.setScale(1, BigDecimal.ROUND_HALF_DOWN)); // 2.2
    
    BigDecimal value3 = new BigDecimal("2.251");
    System.out.println(value3);   // 2.251
    System.out.println(value3.setScale(1, BigDecimal.ROUND_HALF_UP));   // 2.3
    System.out.println(value3.setScale(1, BigDecimal.ROUND_HALF_DOWN)); // 2.3

    7、ROUND_HALF_EVEN    银行家舍入法

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

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

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

    注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

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

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

    以下例子为保留小数点1位,那么这种舍入方式下的结果。

    1.15>1.2 1.25>1.2

    8、ROUND_UNNECESSARY

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

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

     

    展开全文
  • 此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。 如果前一位为奇数,则入位,否则舍去。 以下例子为保留小数点1位,那么这种舍入方式下的结果。 1.15>1.2 1.25>1.2 8、ROUND_...

     

    在银行、帐户、计费等领域,BigDecimal提供了精确的数值计算。其中8种舍入方式值得掌握。

    1、ROUND_UP

    舍入远离零的舍入模式。

    在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

    注意,此舍入模式始终不会减少计算值的大小。

    2、ROUND_DOWN

    接近零的舍入模式。

    在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

    注意,此舍入模式始终不会增加计算值的大小。

    3、ROUND_CEILING

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

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

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

    注意,此舍入模式始终不会减少计算值。

    4、ROUND_FLOOR

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

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

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

    注意,此舍入模式始终不会增加计算值。

    5、ROUND_HALF_UP

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

    如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

    注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

    6、ROUND_HALF_DOWN

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

    如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

    7、ROUND_HALF_EVEN    银行家舍入法

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

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

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

    注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

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

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

    以下例子为保留小数点1位,那么这种舍入方式下的结果。

    1.15>1.2 1.25>1.2

    8、ROUND_UNNECESSARY

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

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

    展开全文
  • 大家好,今天给大家说一下BigDecimal中divide方法中的BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN。这两个类的用法其实在网上已经介绍的很多的。但是有一些注意事项还是要需要了解一下。 首先说一下...

        大家好,今天给大家说一下BigDecimal中divide方法中的BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN。这两个类的用法其实在网上已经介绍的很多的。但是有一些注意事项还是要需要了解一下。

        首先说一下用法,BigDecimal中的divide主要就是用来做除法的运算。其中有这么一个方法.

            public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)

        第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式。其中我们标题上就是其中的两种

        BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2

        BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3

        BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4

        BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3

        后边两种的区别就是如果保留的位数的后一位如果正好是5的时候,一个舍弃掉,一个进位。

        看如下案例:

            BigDecimal d1 = new BigDecimal (45);    //45除以7=6.428571428571429

            BigDecimal d2 = new BigDecimal (7); 

            d1.divide(d2,5,BigDecimal.ROUND_UP);//得到的结果就是6.42858,直接进位

            但是要注意的点在这里

            就是

             System.out.println(d1.divide(d2,3,BigDecimal.ROUND_HALF_UP));//

             System.out.println(d1.divide(d2,3,BigDecimal.ROUND_HALF_DOWN));//

            上面的代码意思是结果保留3位,第四位是5,

            如果我们按照上面的理解,得到的结果应该一个是6.429,一个是6.428

            但是实际的运行结果都是6.429 。这里要注意,这个怎么看呢,如要注意,这两个的本质都是四舍五入,如果你的结果总位数超过了你要保留的位数,都是按照四舍五入。

            那么什么时候才按照进位和设为进行运算呢,只有你的结果的位数恰好比要保留的位数多一位,并且最后一位是恰好是5,才按照之前的规则进行运算。好了,今天的分享就到这里。

        好了关于配置环境变量的问题我们就探讨到这里,如果大家有其他疑问,可在文章下留言,如果觉得文章对自己的学习有帮助,请关注我的博客,后面会有更多的文章发布。也可以添加qq群:767375013。里边有更多的文档视频资料,及线上免费公开课。希望和大家一起探讨。想学java的同学,也可以看我的java基础教学视频https://www.bilibili.com/video/av37413483?from=search&seid=16996396768466285203,免费学习

        

    展开全文
  • BigDecimal使用ROUND_HALF_UP进行四舍五入

    万次阅读 2018-03-17 13:25:49
    BigDecimal bdTest = new BigDecimal(1.745); BigDecimal bdTest1 = new BigDecimal(0.745...bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP); bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP); S...
    BigDecimal bdTest = new BigDecimal(1.745);
    BigDecimal bdTest1 = new BigDecimal(0.745);
    bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);
    bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println("bdTest:" + bdTest); // 1.75
    System.out.println("bdTest1:" + bdTest1); // 0.74

    运行以上代码可以看到,1.745四舍五入的结果是1.750.745四舍五入的结果是0.74

    原因:
    使用参数为float或double的BigDecimal创建对象会丢失精度。因此强烈建议不要使用参数为float或double的BigDecimal创建对象。

    System.out.println(new BigDecimal(1.745)); // 1.74500000000000010658141036401502788066864013671875
    System.out.println(new BigDecimal(0.745)); // 0.74499999999999999555910790149937383830547332763671875

    解决办法:
    1. 使用BigDecimal(String val)的构造方法创建对象
    new BigDecimal("1.745");
    new BigDecimal("0.745");
    2. 使用使用BigDecimal的valueOf(double val)方法创建对象
    BigDecimal.valueOf(1.745);
    BigDecimal.valueOf(0.745);

    http://stackoverflow.com/questions/12460482/how-to-round-0-745-to-0-75-using-bigdecimal-round-half-up

    展开全文
  • 此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。 如果前一位为奇数,则入位,否则舍去。 以下例子为保留小数点1位,那么这种舍入方式下的结果。 1.15>1.2 1.25>1.2 8、ROUND_...
  • BigDecimal 首先先说一下自己遇到的问题 System.out.println(new BigDecimal("111.1212335... .setScale(6, BigDecimal.ROUND_HALF_UP));//111.121234 System.out.println(new BigDecimal("111.1212335") .setScale
  • Half-Edge结构即半边结构是图形学中一种十分重要的数据结构,许多算法都是基于这种结构实现的,从数学角度看这种结构十分容易,很好理解,而实际编码的时候似乎不是很轻松,之前写过两次都感觉写的不是很好,而网上...
  • 水的问题之half类型

    千次阅读 2017-05-02 21:10:15
    half精度剖析
  • async 和 Leader/Followers 模式的主要区别关键字: half-sync/half-async leader/followers 在 《POSA2》 一书中,关于这两个模式有两个很形象的比喻: 半同步/半异步(half-sync/half-async): 许多餐厅使用 ...
  • 一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符。 2.半角:指一字符占用一个标准的字符位置。通常的英文字母、数字键、符号键都是半角的,半角的显示内码都是一个字节。在系统内部,以上三种...
  • Half Life 2 Source 引擎介绍

    千次阅读 2015-09-09 15:05:25
    原文:D3DTutorial10_Half-Life2_Shading.pdf m17 转载与编译   关于什么是Engine(引擎)?    在Half-Life 完成之后不久,Valve开始筹备他们的下一个主打游戏--Half-Life 2。在商讨游戏引擎的采用问题上,...
  • 权宜之计 half-measure

    2009-05-13 21:37:00
    诺贝尔奖获得者、美国经济学家保罗•克鲁格曼近日称,如果美国不采取更有效的经济刺激措施,...请看外电的报道:"Were doing half-measures that help the economy limp along without fully recovering, and were hav
  • 友情提示 Half-Pixel Offset 其实算是个过时话题,请依据个人情况谨慎了解 :) 讲述之前我们先明确几个概念: 窗口由正方形(注1)的像素(pixel)组成,每个像素只能显示一种颜色,并且像素坐标的原点在左上角像素的中心...
  • 小程序通过slot自定义Half Screen Dialog

    千次阅读 2020-08-03 13:32:07
    在官方Half Screen Dialog文档页面,可以看到如下介绍: Slot 名称 描述 title 组件自定义标题栏 desc 组件自定义操作描述 footer 操作按钮区域slot 要自定义这些,需要在mp-halfScreenDialog标签里...
  • hampalyzer Hampalzyer是用于解析Half-Life GoldSrc...Hampalyzer应该有一个端点可以使用给定的Half-Life GoldSource日志文件,该文件包含典型事件,例如碎片,生成以及玩家与游戏中实体的交互。 Hampalyzer将从该文件
  • 更简单的方法–右键单击工具栏上的Half-Life 2图标,然后单击“从Chrome删除...”。免责声明:此扩展程序是由粉丝创建的。 我们和内容与任何公司都不隶属,赞助或批准,并且是非官方的。 如果您认为我们侵犯了您的...
  • [转]Half Life 2 Source 引擎介绍

    千次阅读 2012-04-07 09:46:12
    原文:D3DTutorial10_Half-Life2_Shading.pdf m17 转载与编译   关于什么是Engine(引擎)?    在Half-Life 完成之后不久,Valve开始筹备他们的下一个主打游戏--Half-Life 2。在商讨游戏引擎的采用问题上,...
  • 这是使用标签的解决方法。 这些不能代替常规的全明星评级,而是通过标签架额外使用。 信息:*评分等级从0到5,以0.25为增量*标签名称格式为“ rating-TYPE-RATING”,其中TYPE是“ stars”或“ clouds”,而RATING是...
  • 食人魔生锈的双持 Quake 和 Half-Life 纹理 WAD 解析器ogre是 Quake 和 Half-LifeWAD文件的WAD表示和nom解析器。它是用纯 Rust 编写的,并通过#![forbid(unsafe_code)]强制使用安全代码包。Rust 表示Rust 表示存在于...
  • shader学习之路(1)- half lambert

    千次阅读 2016-07-25 00:09:40
    在学习这个shader之前先提个常用概念,即光照模型,...大致了解了光照模型的概念,接下来介绍下今天的主角,Half Lambert模型,该模型是Valve在开发经典游戏《Half-Life(半衰期)》(半条命这个译名真是后无古人的误
  • 此功能将图像对半弯曲到用户设置的水平“i” 它使用二次多项式变换注意:该功能将为图像添加更多像素,因此可以根据需要进行剪切使用方法:简单地将任何类型的图像读入变量“I” 并设置弯曲水平“i”
  • 以前使用ACE实现了一个服务器框架,觉得太过“笨重”,一直努力想将原来的代码升级一下,后来看了一下boost和asio的实现,觉得相对ace很light,下定决心移植到boost/asio上来,这就是bas的由来。 bas的设计思路是...
  • refs: ... https://superuser.com/questions/298919/what-is-tcp-half-open-connection-and-tcp-half-closed-connection https://en.wi...
  • 半同步半异步模式一个架构模式,清晰的结构,高效并发的I/O译者: cuichaox@gmail.com英文原文: http://www.cs.wustl.edu/~schmidt/PDF/HS-HA.pdf摘要这篇文字介绍了半同步...这个模式中,高层使用同步I/O模型,简化编程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,209
精华内容 20,883
关键字:

half用法