展开

关键词

java 中对 BigDecimal 使用详解

目录 1 为什么学习这个 2 BigDecimal是什么? 5.3 结论 6 除法运算可能报错原因 6.1 舍入模式 7 setScale() 8 总结 1 为什么学习这个 因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度 Java在java.math包中提供的APIBigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 构造器是的特殊方法, 专门用来创建对象,特别是带有参数的对象。 3 BigDecimal 构造器 BigDecimal(int) 创建一个具有参数所指定整数值的对象。 subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。

11930

Java--Big Number操作(BigIntegerBigDecimal

BigInteger java.math.BigInteger 的使用场景是大整数操作。 java.math.BigDecimal 提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作。 我们都知道Java的float和double是浮点数,直接进行比较操作、运算操作都会有误差,BigDecimal就不会出现这种情况。 toString()方法提供BigDecimal的规范表示。 提供用于操作BigDecimal规模两种类型的操作: 缩放/舍入操作 小数点移动操作。 日常Coding中我还没用到过这个,需要使用的时候再查看文档吧。 不过这个的使用方法应该和BigInteger类似,只不过支持小数操作,在方法头中会多一些形参来控制精度或其他控制。

57220
  • 广告
    关闭

    老用户专属续费福利

    云服务器CVM、轻量应用服务器1.5折续费券等您来抽!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    new Bigdecimal(double) 和 Bigdecimal.valueof()和BigDecimal(String)

    有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625 BIgDecimal(double):当double必须用作BigDecimal的源时,请注意,此构造方法提供了一个准确转换之后,才用Double.toString(double)方法,然后使用BigDecimal BIgDecimal.valueof(double) 这个方法没有提供准确转换,而是直接是用Double.toString(double)方法,然后使用BigDecimal(String)构造方法,所以这个方法可用 BigDecimal(String) :这个一看就看出来了,直接就使用BigDecimal(String)构造方法了,这个是最好的。 总结:推荐使用BigDecimal.valueof(String) 和 BingDecimal(String) 这两个方法,不会出现精度的问题。

    61610

    Java中的BigDecimal你了解多少?

    所以接下来我们就可以使用Java中的BigDecimal来解决这类问题。 普及一下: Java中float的精度为6-7位有效数字。double的精度为15-16位。 如下代码: BigDecimal a = new BigDecimal(1.01); BigDecimal b = new BigDecimal(1.02); BigDecimal c = new BigDecimal 而且我们从源码的注释中官方也给出了说明,如下是BigDecimal的double类型参数的构造器上的一部分注释说明: * The results of this constructor can be 这里我写了一个工具: /** * @author: Ji YongGuang. = 四舍五入 return b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);// 应对除不尽的情况 } } 该工具提供了double类型的基本的加减乘除运算

    67620

    java 大数据处理 BigDecimal 解析

    无奈求助百度,发现个好东西,BigDecimal 。 有很多个初始化方法,我这里列举一个,在初始化对象的同时,传入数字字符串,此时的对象值为该数字 7 //下面的 m、n 都是 1 ,因为我的这个监听事件的运算是从 1 开始的。 8 9 BigDecimal m = new BigDecimal("1"); 10 BigDecimal n = new BigDecimal("1 "); 11 12 BigDecimal result_2 = new BigDecimal("1");//这个用来保存 m! 方法,乘法,这里的乘包括同门的加、减、除,不再是+、-、*、/ 30 //常用乘法: multiply(BigDecimal xx),四个都有返回值

    446100

    JAVA之学习biginteger的使用和bigdecimal的使用

    biginteger的使用 A:BigInteger的概述 * 可以让超过Integer范围内的数据进行运算 * B:构造方法 * public BigInteger(String 的使用 A:BigDecimal的概述 * 由于在运算的时候,float类型和double很容易丢失精度,演示案例。 * public BigDecimal subtract(BigDecimal subtrahend) * public BigDecimal multiply(BigDecimal multiplicand ) * public BigDecimal divide(BigDecimal divisor) * D:案例演示 * BigDecimal的构造方法和成员方法使用 BigDecimal的案例代码 ) * public BigDecimal divide(BigDecimal divisor) * D:案例演示 * BigDecimal的构造方法和成员方法使用 */ public

    27160

    BigDecimal

    BigDecimal a = new BigDecimal("1.0"); BigDecimal b = new BigDecimal("0.9"); BigDecimal c = new BigDecimal BigDecimal a = new BigDecimal("1.0"); BigDecimal b = new BigDecimal("0.9"); System.out.println(a.compareTo BigDecimal m = new BigDecimal("1.255433"); BigDecimal n = m.setScale(3,BigDecimal.ROUND_HALF_DOWN); System.out.println (n);// 1.255 4.BigDecimal 的使用注意事项 注意:我们在使用BigDecimal时,为了防止精度丢失,推荐使用它的 BigDecimal(String) 构造方法来创建对象。 BigDecimal 的实现利用到了 BigInteger, 所不同的是 BigDecimal 加入了小数位的概念

    15710

    BigDecimal

    BigDecimal 的用处 Java在java.math包中提供的APIBigDecimal,用来对超过16位有效位的数进行精确的运算。 所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal来操作。 构造器是的特殊方法,专门用来创建对象,特别是带有参数的对象。 《阿里巴巴Java开发手册》中提到:浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。 BigDecimal a = new BigDecimal("1.0"); BigDecimal b = new BigDecimal("0.9"); BigDecimal c = new BigDecimal BigDecimal a = new BigDecimal("1.0"); BigDecimal b = new BigDecimal("0.9"); System.out.println(a.compareTo

    20510

    利用BigDecimal巧妙处理Double类型精度丢失

    介绍几种创建BigDecimal方式的区别。 整理了高精度计算的工具。 学习了阿里巴巴Java开发手册关于BigDecimal比较相等的规定。 BigDecimal位于java.math包下,用于对超过16位有效位的数进行精确的运算。 一般来说,double类型的变量可以处理16位有效数,但实际应用中,如果超过16位,就需要BigDecimal来操作。 既然这样,那用BigDecimal就能够很好解决这个问题咯? Double的加减乘除运算工具 BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。 方法中的参数也必须是BigDecimal的对象。网上有很多这样的工具,这边直接贴一下,逻辑不难,主要为了简化项目中频繁互相转化的问题。

    50410

    BigDecimal大小判断

    BigDecimal详解: Java在java.math包中提供的APIBigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 构造器是的特殊方法,专门用来创建对象,特别是带有参数的对象。 equals方法会比较值和精确度,而compareTo则会忽略精度。 name2地址不一样,继续向下运行 return true; } if (anObject instanceof String) {//此处用于判断name2是否是String或其子类 ()方法的声明 public int compareTo(BigDecimal val) 参数: val-- 要与此BigDecimal比较的值。 返回值: 此方法,如果BigDecimal为小于val返回-1,如果BigDecimal为大于val返回1,如果BigDecimal为等于val返回0 下面的示例演示math.BigDecimal.compareTo

    1.4K30

    BigDecimal 除法

    ---- ROUND_UP 示例: BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("1.10"); BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("1.10"); BigDecimal one = new BigDecimal b1 = new BigDecimal("-1.11"); BigDecimal b2 = new BigDecimal("1.11"); BigDecimal one = new BigDecimal b1 = new BigDecimal("-1.11"); BigDecimal b2 = new BigDecimal("1.11"); BigDecimal one = new BigDecimal b1 = new BigDecimal("1.14"); BigDecimal b2 = new BigDecimal("1.15"); BigDecimal one = new BigDecimal

    6730

    Java工具之——BigDecimal运算封装(包含金额的计算方式)

    日常对于金额计算,应该都是用的BigDecimal, 可是苦于没有好的工具方法,现在贡献一个我正在用的对于数字计算的工具,项目中就是用的这个,简单粗暴好用,话不多说,代码奉上(该工具需要引入google * @param b1 * @param bn * @return */ public static BigDecimal safeAdd(BigDecimal b1, BigDecimal safeSubtract(BigDecimal b1, BigDecimal... bn) { return safeSubtract(true, b1, bn); } / safeSubtract(Boolean isZero, BigDecimal b1, BigDecimal... bn) { if (null == b1) { b1 = BigDecimal.ZERO; } BigDecimal r = b1; if (null !

    52630

    BigDecimal比较大小,BigDecimal保留几位小数,BigDecimal和0比较大小

    1.BigDecimal比较大小,compareTo方法,-1小于,0相等,1大于 // 值为-1,big1<big2;值为0,相等;值为1,big1>big2 BigDecimal big1 = new BigDecimal(4.4252423); BigDecimal big2 = new BigDecimal(2.3742874234); int result = big1.compareTo (big2); int resultz = big1.compareTo(BigDecimal.ZERO);//和0比比较特殊 2.BigDecimal保留小数位数,下面两种都是四舍五入 //保留4 位小数   括号里的参数是几就是几位 BigDecimal result2 = big2.setScale(4,BigDecimal.ROUND_HALF_UP);//2.3743 double     result3 = big1.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue();//4.4252 //保留4位小数 #.0000几个0就是几位小数

    5.9K20

    BigDecimal除法运算报错

    今天在运用BigDecimal做除法运算的时候,错误如下: Non-terminating decimal expansion; no exact representable decimal result 不是很明白为什么会这个样子,度娘告诉我是因为BigDecimal 做除法运算,如果除的结果为无限小数的时候就会报错。 解决方法是: divide(BigDecimal divisor, int scale, int roundingMode)指定scale和roundingMode 附上很详细解说一份http:/

    4640

    BigDecimal和BigInteger

    后面这截取的无限小数还原成十进制就会损失精度不准确,不能用等值判断了 救星 BigDecimal的横空出世是为了解决浮点数的精度问题,其全限定名为 java.math.BigDecimalBigDecimal BigDecimal基本使用 2.1 常见构造方法 方法 描述 BigDecimal(int val) 将int转换成BigDecimal BigDecimal(int val, MathContext mc) 根据上下设置进行舍入 BigDecimal(long val) 将long转换成BigDecimal BigDecimal(double) 将double转换成BigDecimal BigDecimal 舍入模式) 阿里手册规约:禁止使用构造方法 BigDecimal(double)的方式把 double 值转化为 BigDecimal 对象 BigDecimal num1 = new BigDecimal num1 = new BigDecimal("0.01234"); BigDecimal num2 = new BigDecimal("0.56789"); --------------------

    35210

    BigDecimal的除法

    BigDecimal divideBigDecimal = subBigDecimal.divide(new BigDecimal(13),0,BigDecimal.ROUND_HALF_UP); 第一参数表示除数

    6420

    BigDecimal除法问题

    BigDecimal做除法时,尽量使用divide(BigDecimal divisor, int scale, int roundingMode),这个方法 divisor:被除数 scale保留小数位数 roundingMode保留小数时采用的方法,一般使用BigDecimal.ROUND_UP(四舍五入) 如果不指定保留小数位数,在遇到除不尽的情况下就会报错 BigDecimal源码: try

    5520

    BigDecimal类型divide报错

    原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。 解决方法: foo.divide(bar, 2, BigDecimal.ROUND_HALF_UP);

    48020

    Java之BigDecimal详解

    一、BigDecimal概述 ​ Java在java.math包中提供的APIBigDecimal,用来对超过16位有效位的数进行精确的运算。 所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal来操作。 ​ 构造器是的特殊方法,专门用来创建对象,特别是带有参数的对象。 对象中的值相减,返回BigDecimal对象 multiply(BigDecimal) BigDecimal对象中的值相乘,返回BigDecimal对象 divide(BigDecimal) BigDecimal 格式化 由于NumberFormat的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。

    48920

    BigDecimal知识回顾

    包下的一个,不可变的、任意精度的有符号十进制数,BigDecimal使用户能完全控制舍入行为,如果需要精确计算的结果,则必须使用BigDecimal BigDecimal 的等值比较应使用 compareTo (){ BigDecimal h = new BigDecimal("0.00"); BigDecimal k = BigDecimal.ZERO; System.out.println (){ BigDecimal a = new BigDecimal("2.12"); BigDecimal b = new BigDecimal("0.2"); @Test public void bigDecimal1(){ BigDecimal h = new BigDecimal(1.0); BigDecimal BigDecimal recommend1 = new BigDecimal("0.1"); BigDecimal recommend2 = BigDecimal.valueOf(0.1); 用double

    6420

    相关产品

    • 试驾营销与管理套件

      试驾营销与管理套件

      该产品包含营销类的搜一搜试驾服务、虚拟试驾服务、试驾NFT服务和管理类的试驾伴侣平台、试驾数字钥匙服务。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注腾讯云开发者

      领取腾讯云代金券