首页 > 编程知识 正文

韩都衣舍的商业模式与逻辑(bigdecimal什么类型)

时间:2023-05-03 19:18:20 阅读:71760 作者:1517

BigDecimal.ROUND_UP翻译:舍入模式从零开始舍入。 始终在丢弃非零小数之前递增数字。 请注意,在此舍入模式下,计算值的大小决不会变小。

无论正负,在保持精度前的数字上加1

0.123456789如果保留小数点后4位,则为0.1235

-0.123456789小数第四位的结果是-0.1235

BigDecimal.ROUND_DOWN翻译:舍入模式将舍入为零。 舍弃小数,也就是舍去之前不要增加数字。 请注意,在此舍入模式下,计算值的大小决不会增加。

无论正负,保持精度后的数字直接舍去(

留下0.123456789小数点后4位的结果是0.1234

-0.123456789小数第四位的结果是-0.1234

BigDecimal.ROUND_CEILING翻译:舍入模式向正无穷大方向舍入。 如果BigDecimal为正,则行为与ROUND_UP相同; 如果为负,则表示为ROUND_DOWN。 请注意,在此舍入模式下,计算值永远不会减少。

正: ROUND_UP

负: ROUND_DOWN

0.123456789如果保留小数点后4位,则为0.1235

-0.123456789小数第四位的结果是-0.1234

BigDecimal.ROUND_FLOOR翻译:舍入模式将舍入为负无穷大。 如果BigDecimal为正,则行为与ROUND_DOWN相同。 如果为负,则表示形式与ROUND_UP相同。 请注意,在此舍入模式下,计算值不会增加。

动作与BigDecimal.ROUND_CEILING相反

正: ROUND_DOWN

负: ROUND_UP

留下0.123456789小数点后4位的结果是0.1234

-0.123456789小数第四位的结果是-0.1235

BigDecimal.ROUND_HALF_UP翻译:舍入模式将被舍入为“最近的邻居”。 在这种情况下,只要两个邻居不是等距的,就会被舍入。 销毁分数0.5时,ROUND_UP; 否则,动作与ROUND_DOWN相同。 请注意,这是我们大多数人在小学教的四舍五入模型。

四舍五入,去掉正负来看

0.123456789如果保留小数点后4位,则为0.1235

-0.123456789小数第四位的结果是-0.1235

BigDecimal.ROUND_HALF_DOWN翻译:在这种情况下,对“最近的邻居”的舍入模式是舍入的,除非两个邻居距离相等。 对于放弃的分数**** 0.5,行为与ROUND_UP相同。 否则,动作与ROUND_DOWN相同。

留下0.123456789小数点后4位的结果是0.1234

-0.123456789小数第四位的结果是-0.1234

BigDecimal.ROUND_HALF_EVEN翻译:舍入模式将被舍入为“最近的邻居”。 只要两个邻居不是等距的,就会被偶数邻居舍入。 舍弃分数左边的数字为奇数时,返回ROUND_HALF_UP; 对于偶数,其行为与ROUND_HALF_DOWN相同。 请注意,这是一种舍入模式,在一系列计算中重复应用时,将累积误差最小化。

无论正负,精度前的1位保持偶数舍去,如果是基数则加1

0.123 456789小数第四位的结果是0.1234

-0.123 456789小数第四位的结果为-0.1234

0.123 35小数第五位的结果为0.1234

-0.123 35小数第五位的结果是-0.1234

BigDecimal.ROUND_UNNECESSARY翻译:舍入模式不需要舍入,因为可以断言所请求的操作会产生准确的结果。 如果为生成不正确结果的操作指定此舍入模式,则会抛出ArithmeticException。

如果超过精度,就会发生错误

保留0.123456789小数4位时抛出异常

示例代码

import java.math.BigDecimal; publicclassbigdecimaltest { publicstaticvoidmain (字符串[ ] args ) bigdecimal bigdecimal1=new bigdecimal (0.12345 ); bigdecimal bigdecimal2=new bigdecimal (-0.12345 ); system.out.println (' * * * * * * * * * * * * * * * * * * bigdecimal.round _ up * * * * * * * * * * * * * * * * * * * * * * )

.println(bigDecimal1.setScale(4, BigDecimal.ROUND_UP));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_UP));System.out.println("******************* BigDecimal.ROUND_DOWN ***********************");System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_DOWN));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_DOWN));System.out.println("******************* BigDecimal.ROUND_CEILING ***********************");System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_CEILING));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_CEILING));System.out.println("******************* BigDecimal.ROUND_FLOOR ***********************");System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_FLOOR));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_FLOOR));System.out.println("******************* BigDecimal.ROUND_HALF_UP ***********************");System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_HALF_UP));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_HALF_UP));System.out.println("******************* BigDecimal.ROUND_HALF_DOWN ***********************");System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_HALF_DOWN));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_HALF_DOWN));System.out.println("******************* BigDecimal.ROUND_HALF_EVEN ***********************");System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_HALF_EVEN));System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_HALF_EVEN));System.out.println(new BigDecimal("0.12335").setScale(4, BigDecimal.ROUND_HALF_EVEN));System.out.println(new BigDecimal("0.12335").setScale(4, BigDecimal.ROUND_HALF_EVEN));System.out.println("******************* BigDecimal.ROUND_UNNECESSARY ***********************");System.out.println(bigDecimal1.setScale(6, BigDecimal.ROUND_UNNECESSARY));System.out.println(bigDecimal2.setScale(3, BigDecimal.ROUND_UNNECESSARY));}}

运行结果

******************* BigDecimal.ROUND_UP ***********************0.1235-0.1235******************* BigDecimal.ROUND_DOWN ***********************0.1234-0.1234******************* BigDecimal.ROUND_CEILING ***********************0.1235-0.1234******************* BigDecimal.ROUND_FLOOR ***********************0.1234-0.1235******************* BigDecimal.ROUND_HALF_UP ***********************0.1235-0.1235******************* BigDecimal.ROUND_HALF_DOWN ***********************0.1234-0.1234******************* BigDecimal.ROUND_HALF_EVEN ***********************0.1234-0.12340.12340.1234******************* BigDecimal.ROUND_UNNECESSARY ***********************0.123450Exception in thread "main" java.lang.ArithmeticException: Rounding necessaryat java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4179)at java.math.BigDecimal.needIncrement(BigDecimal.java:4235)at java.math.BigDecimal.divideAndRound(BigDecimal.java:4143)at java.math.BigDecimal.setScale(BigDecimal.java:2455)at com.demo.BigDecimalTest.main(BigDecimalTest.java:43)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。