首页 > 其他分享 >BigDecimal

BigDecimal

时间:2023-06-20 10:56:26浏览次数:30  
标签:BigDecimal 构造方法 0.1 new 2.1 String

BigDecimal

  • 去一家公司笔试遇到一个这样的问题,问输出结果:
BigDecimal bigDeciml1 = new BigDecimal(2);
BigDecimal bigDeciml2 = new BigDecimal(2.1);
BigDecimal bigDeciml3 = new BigDecimal("2.1");

结果:

2
2.100000000000000088817841970012523233890533447265625
2.1
  • 1、参数类型为double的构造方法的结果有一定的不可预知性。有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
  • 2、另一方面,String 构造方法是完全可预知的:写入 newBigDecimal("0.1") 将创建一个 BigDecimal,它正好等于预期的 0.1。因此,比较而言,通常建议优先使用String构造方法。
    当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf,如下:
BigDecimal bigDecimal4 = new BigDecimal(Double.toString(2.1));
BigDecimal bigDecimal5 = BigDecimal.valueOf(2.1);

标签:BigDecimal,构造方法,0.1,new,2.1,String
From: https://www.cnblogs.com/yliunyue/p/17493003.html

相关文章

  • Java8 Stream List Map:Stream 流对象汇总 求和 某个属性 BigDecimal MDouble
    测试实体(数字对象使用MDouble):importcom.mchweb.common.lang.MDouble;importlombok.*;@Getter@Setter@Builder(toBuilder=true)@NoArgsConstructor@AllArgsConstructorpublicclassUser{privateMDoublemoney;}importcom.mchweb.common.lang.MDouble;imp......
  • 告警:线上慎用 BigDecimal !
    来源:cnblogs.com/zhangyinhua/p/11545305.html一、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些......
  • Runtime - 运行时环境类(JVM)和大数值运算(BigInteger、BigDecimal)
    Runtime代表Java程序的运行时环境,可以通过getRuntime方法获取当前运行时。应用程序不能自己创建Runtime对象,可以通过Runtime的静态方法getRuntime()获得Runtime对象。Runtime类可以访问jvm的相关信息1、处理器数量runtime.availableProcessors()2、内存信息"获取最大内存数"--》......
  • BigDecimal的用法
    add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。subtract(BigDecimal)BigDecimal对象中的值相减,然后返回这个对象。multiply(BigDecimal)BigDecimal对象中的值相乘,然后返回这个对象。divide(BigDecimal)BigDecimal对象中的值相除,然后返回这个对象。abs()BigDecima......
  • 【刨根问底】BigDecimal 案例和部分源码分析
    本文总以下几个部分:前言Bigdecimal定义Bigdecimal创建方式Bigdecimal部分源码分析Bigdecimal坑Bigdecimal使用建议Bigdecimal工具类前言在咱们开发过程中很容易遇到计算的问题,普通计算其实也还好使用int、long、double、float基本上能应付。但是如果涉及到数据类型转后在处理等......
  • java精确除法运算-BigDecimal
    一、BigDecimal介绍Java中提供了大数字(超过16位有效位)的操作类,即java.math.BinInteger类和java.math.BigDecimal类,用于高精度计算.其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类.BigDecimal类的实现用到了BigInteger类,不......
  • Java开发手册中为什么禁止使用BigDecimal的equals方法做等值比较已经为什么禁止使用do
    场景阿里Java开发手册嵩山版中明确指出:1、BigDecimal的等值比较应使用compareTo()方法,而不是equals()方法equals()方法会比较值和精度(1.0与1.00返回结果为false),而compareTo()则会忽略精度2、禁止使用构造方法BigDecimal(double)的方式把double值转换为BigDecimal对象BigDeci......
  • double 的Bigdecimal精度
    doublesd=(double)8/(double)261;BigDecimalbgitem=BigDecimal.valueOf(sd);doublefitem=Math.round(bgitem.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()10000)0.01;DecimalFormatdf=newDecimalFormat("######0.00&......
  • 3.2. 数学类(Math、BigInteger、BigDecimal)
    1.Math类Math类提供了一些基本的数学函数,如求平方根、绝对值、三角函数等。它是一个final类,并且所有的方法都是static的,因此无需创建对象,直接使用类名调用方法即可。以下是Math类的一些常用方法:abs(doublea):返回参数的绝对值。ceil(doublea):返回大于或等于参数的最小整数值......
  • BigInteger与BigDecimal类
    Math类java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。abs绝对值acos,asin,atan,cos,sin,tan三角函数sqrt平方根pow(doublea,dobleb)a的b次幂log自然对数expe为底指数max(doublea,doubleb)min(doublea,doubleb)......