直接进网站的浏览器,企业绿色发展助力,湘潭网站建设公司有哪些,网站备案查询系统一、BigDecimal 简介 BigDecimal 类位于 java.math 包中#xff0c;它提供了更加精确的算术运算#xff0c;使用户完全控制舍入行为。 如果未指定舍入模式#xff0c;并且无法表示确切的结果#xff0c;则抛出异常; 否则#xff0c;可以通过操作提供适当的 MathContext 对…一、BigDecimal 简介 BigDecimal 类位于 java.math 包中它提供了更加精确的算术运算使用户完全控制舍入行为。 如果未指定舍入模式并且无法表示确切的结果则抛出异常; 否则可以通过操作提供适当的 MathContext 对象来进行计算以选择精度和舍入模式。虽然双精度浮点型变量 double 可以处理16位有效数但在实际应用中可能需要对更大或者更小的数进行运算和处理。一般情况下对于那些不需要准确计算精度的数字我们可以直接使用 Float 或 Double 处理但是 Double.valueOf(String) 和Float.valueOf(String) 会丢失精度。如果我们需要精确计算的结果则必须使用BigDecimal 类来操作。
【注】使用 BigDecimal 进行计算时我们不能再使用算术运算符、-、*、/进行算数运算而是使用 BigDecimal 类提供的 add、subtract、multiply、divide 等方法来进行算数运算。
我们这篇讲讲小编在使用BigDecimal中使用ROUND_HALF_UP进行精度遇到的问题。 我们先看下面这段代码的输出 BigDecimal bigDecimalnew BigDecimal(3.845);System.out.println(bigDecimal);System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP));BigDecimal bigDecimal2new BigDecimal(0.845);System.out.println(bigDecimal2);System.out.println(bigDecimal2.setScale(2,BigDecimal.ROUND_HALF_UP));输出的结果 我们可以看到3.845四舍五入的结果是3.850.845四舍五入的结果是0.84。
原因使用参数为float或double的BigDecimal创建对象会丢失精度。因此强烈建议不要使用参数为float或double的BigDecimal创建对象。 解决办法
使用BigDecimal(String val)的构造方法创建对象 new BigDecimal(“3.845”); new BigDecimal(“0.845”);使用使用BigDecimal的valueOf(double val)方法创建对象 BigDecimal.valueOf(3.845); BigDecimal.valueOf(0.845);