文章目录[隐藏] 1 初始化 2 加减乘除 3 比较 4 RoundingMode 1 初始化 //数值的形式初始化 BigDecimal num1 = new BigDecimal(123.213 ); //尽量用字符串的形式初始化 BigDecimal num2 = new BigDecimal("0.005"); 2 加减乘除 //加法 BigDecimal result1 = num1 (); BigDecimal result8 = num2.abs(); //除法 BigDecimal result9 = num1.divide(num1,20,BigDecimal.ROUND_HALF_UP ); BigDecimal result10 = num2.divide(num2,20,BigDecimal.ROUND_HALF_UP); (BigDecimal divisor 除数, int scale 精确小数位,int roundingMode 舍入模式) 3 比较 BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal
//前提为a、b均不能为null if(a.compareTo(b) == -1){ System.out.println("a小于b"); } if(a.compareTo(b) == 0){ System.out.println("a等于b"); } if(a.compareTo(b) == 1){ System.out.println("a大于b"); } if(a.compareTo(b) > -1){ System.out.println("a大于等于b
1.BigDecimal构造方法 public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用 public BigDecimal( BigDecimal bDouble = new BigDecimal(2.3); BigDecimal bString = new BigDecimal("2.3"); public BigDecimal divide(BigDecimal value); //除法 用法如下: public static void main (String[] args) { BigDecimal a = new BigDecimal("4.5"); BigDecimal b = new BigDecimal (b1.max(b2)); 7、比较大小并放回最小的min BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal
BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal(2);//这种写法是可以的 3. ROUND_DOWN BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);System.out.println ROUND_UP BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);System.out.println );System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP BigDecimal g = new BigDecimal("-2.225667"
BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal(2);//这种写法是可以的 3. ROUND_DOWN BigDecimal b = new BigDecimal(“2.225667”).setScale(2, BigDecimal.ROUND_DOWN); System.out.println ROUND_UP BigDecimal c = new BigDecimal(“2.224667”).setScale(2, BigDecimal.ROUND_UP); System.out.println ); System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP BigDecimal g = new BigDecimal(“-2.225667
= roundingMode <= 7) 一、BigDecimal.ROUND_DOWN BigDecimal num = new BigDecimal("3.16159"); // 直接舍去多余的位数 (2, BigDecimal.ROUND_DOWN)); // 3.16 二、BigDecimal.ROUND_UP BigDecimal num = new BigDecimal("3.161590" )); // 3.16159 三、BigDecimal.ROUND_CEILING BigDecimal num = new BigDecimal("3.161590"); // 天花板(向上),正数进位向上 (2, BigDecimal.ROUND_HALF_EVEN)); // 3.46 BigDecimal num = new BigDecimal("3.37459"); // 如果舍弃部分左边的数字为奇数 (num.setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 3.37 八、BigDecimal.ROUND_UNNECESSARY BigDecimal num
BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal(2);//这种写法是可以的 3. ROUND_UP BigDecimal c = new BigDecimal(“2.224667”).setScale(2, BigDecimal.ROUND_UP); System.out.println rate = new BigDecimal(1).divide(new BigDecimal(3), 6, BigDecimal.ROUND_HALF_UP); 以上这篇基于BigDecimal.setScale 的用法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
java中BigDecimal有哪些用法 1、BigDecimal使用scale()表示小数位数。 BigDecimal d1 = new BigDecimal("987.65"); BigDecimal d2 = new BigDecimal("987.6500"); BigDecimal BigDecimal d1 = new BigDecimal("123.4500"); BigDecimal d2 = d1.stripTrailingZeros(); System.out.println d3 = new BigDecimal("1234500"); BigDecimal d4 = d3.stripTrailingZeros(); System.out.println(d3 的用法,希望对大家有所帮助。
最近在使用BigDecimal进行四舍五入时,发现setScale()方法设置的精度值并没有起作用,一度让我怀疑起是否jdk有bug,代码如下: 错误代码 double d = 7.199999999999999 ; BigDecimal decimal = new BigDecimal(String.valueOf(d)); decimal.setScale(2, BigDecimal.ROUND_HALF_UP 正确代码 double d = 7.199999999999999; BigDecimal decimal = new BigDecimal(String.valueOf(d)); //重新生成了新的对象 BigDecimal decimal2 = decimal.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(“—————decimal1 一般来说,可以使用链式方式构造新对象并设置精度: BigDecimal decimal = new BigDecimal(String.valueOf(d)).setScale(2, BigDecimal.ROUND_HALF_UP
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。 BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。 方法中的参数也必须是BigDecimal的对象。 11 BigDecimal ma = new BigDecimal(a); 12 BigDecimal mb = new BigDecimal(b); 13 BigDecimal mc = new BigDecimal(c); 14 BigDecimal md = new BigDecimal(d); 15 System.out.println
有人可能认为在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) 这两个方法,不会出现精度的问题。
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 加入了小数位的概念
BigDecimal 的用处 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。 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 BigDecimal 的使用注意事项 注意:我们在使用BigDecimal时,为了防止精度丢失,推荐使用它的 BigDecimal(String) 构造方法来创建对象。
进行除法计算时,应指定一个舍入模式,例如: BigDecimal a = new BigDecimal(10); BigDecimal b = new BigDecimal(3); BigDecimal add() add() 方法可以用于对两个BigDecimal值进行加法运算,返回一个新的BigDecimal值,例如: BigDecimal a = new BigDecimal("10"); BigDecimal subtract() subtract() 方法可以用于对两个BigDecimal值进行减法运算,返回一个新的BigDecimal值,例如: BigDecimal a = new BigDecimal( 例如: BigDecimal a = new BigDecimal("10"); BigDecimal b = new BigDecimal("3"); BigDecimal result = a.divide 总结 通过本文的介绍,我们了解了BigDecimal类型,掌握了它的基本用法、需要注意的地方和常用方法。与double和float浮点数类型相比,它在进行高精度计算时具有更高的精度和更可靠的精度控制。
1、BigDecimal概述 1.1、为什么要用BigDecimal? 1.2、BigDecimal构造方法 public BigDecimal(double val):将double表示形式转换BigDecimal(注:不建议使用) public BigDecimal(int [] args){ BigDecimal bigDecimal = new BigDecimal(2); BigDecimal bDouble = new BigDecimal args){ BigDecimal bDouble1 = BigDecimal.valueOf(2.3); BigDecimal bDouble2 = new BigDecimal BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法 import
---- 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
BigDecimal详解: Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 BigDecimal所创建的是对象,我们不能使用传统的+、-、、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。 ()方法的声明 public int compareTo(BigDecimal val) 参数: val-- 要与此BigDecimal比较的值。 返回值: 此方法,如果BigDecimal为小于val返回-1,如果BigDecimal为大于val返回1,如果BigDecimal为等于val返回0 下面的示例演示math.BigDecimal.compareTo ()方法的用法。
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作 表11-15 BigDecimal类的常用方法 序号 方 法 类型 描 述 1 public BigDecimal(double val) 构造 将double表示形式转换 为BigDecimal 2 public BigDecimal(int val) 构造 将int表示形式转换为 BigDecimal 3 public BigDecimal(String val) 构造 将字符串表示 形式转换为 BigDecimal 4 public BigDecimal add(BigDecimal augend) 普通 加法 5 public BigDecimal subtract(BigDecimal subtrahend ) 普通 减法 6 public BigDecimal multiply(BigDecimal multiplicand) 普通 乘法 7 public BigDecimal divide(BigDecimal
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就是几位小数
当我在处理两个bigDecimal类型变量相减的时候保证结果不为负值,如果为负值则将结果变为0,此时我想到在php中最经典的max函数<?phpecho(max(0,-10) . "
"); // 输出0同样在java中bigDecimal对象也有max方法,为了保证两数相减后不为0,我对变量使用max方法处理。 stockNums = stockNums.max(BigDecimal.ZERO); // 保证库存值不为负值 stockNums和零值对比,取最大值即可