玖叶教程网

前端编程开发入门

Java精确运算高位数数字

BigDecimal是在Java中java.math包中提供的API类,是用来对超过16位有效数字进行精确运算的,像double只能处理16位有效数字,在商业计算中如果需要精确计算就要用到BigDecimal,还有一种情况就是mysql表中的某个字段类型是Decimal(N,M),对应Java的类型就是BigDecimal,用过逆向工程的都知道,Decimal(N,M)类型的字段映射成Java对象的类型就是BigDecimal,我们经常要对BigDecimal类型进行加减乘除运算,然而,BigDecimal是一个类,不能直接加减乘除,接下来就来看看BigDecimal。

Java BigDecimal简单应用

在Double的长度不够用的时候,使用BigDecimal来计算大数。

        BigDecimal bd1 = new BigDecimal("2.11511111111111111111111");
        BigDecimal bd2 = new BigDecimal("2");
				
				// 直接打印:加、减、乘、除
        System.out.println(bd1.add(bd2));
        System.out.println(bd1.subtract(bd2));
        System.out.println(bd1.multiply(bd2));
        System.out.println(bd1.divide(bd2));

				// 保留2位小数,四舍五入
        System.out.println(bd1.add(bd2).setScale(2, RoundingMode.HALF_UP));

【每日一学】面试必备:Java泛型问题全解析,高效应对挑战

学习总目标

本次学习目标

大厂面试官最喜欢问的面试难点

链接 | toutiao.com/a6749111

java BigDecimal常用总结

java.math.BigDecimal

新建:

BigDecimal bignum1 = new BigDecimal("10");

BigDecimal bignum2 = new BigDecimal(10);

BigDecimal bignum3 = new BigDecimal(10.10);

「Java工具类」java算数计算工具类,BigDecimal封装计算精确位数

介绍语

BigDecimal 工具类

java
BigDecimal 工具类
import com.google.common.base.Strings;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 精确的浮点数运算
*
*/
public class DecimalUtil
{
/** 默认除法运算精度 */
private static final int DEF_DIV_SCALE = 10;
/** 这个类不能实例化 */
private DecimalUtil()
{
}
/**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static String add(String v1, String v2)
{
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).toString();
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static String sub(String v1, String v2)
{
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).toString();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static String mul(String v1, String v2)
{
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).toString();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static String div(String v1, String v2)
{
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static String div(String v1, String v2, int scale)
{
if (scale < 0)
{
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
if (b1.compareTo(BigDecimal.ZERO) == 0)
{
return BigDecimal.ZERO.toString();
}
return b1.divide(b2, scale, RoundingMode.HALF_UP).toString();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static String round(String v, int scale)
{
if (scale < 0)
{
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(v);
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, RoundingMode.HALF_UP).toString();
}
/**
* 对 v 进行向上取整
* @param v
* @param scale
* @return
*/
public static String roundUp(String v,int scale){
if (scale < 0)
{
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(v);
return b.setScale(scale,BigDecimal.ROUND_UP).toString();
}
/**
* 取余,并返回除完得值
* @param divisor 除数
* @param dividend 被除数
* @return
*/
public static String[] remainder(String divisor,String dividend){
if (Strings.isNullOrEmpty(divisor)){
throw new IllegalArgumentException("divisor can`t empty!");
}
BigDecimal divisorDecimal = new BigDecimal(divisor);
BigDecimal dividendDecimal = new BigDecimal(dividend);
BigDecimal[] c = divisorDecimal.divideAndRemainder(dividendDecimal);
String[] str = {c[0].toString(),c[1].toString()};
return str;
}
```

Java 的精确计算

作为

Java:用BigDecimal处理Double类型精度丢失

本篇要点

  • 简单描述浮点数十进制转二进制精度丢失的原因。
  • 介绍几种创建BigDecimal方式的区别。
  • 整理了高精度计算的工具类。
  • 学习了阿里巴巴Java开发手册关于BigDecimal比较相等的规定。

初识java—(三十五)Math类、Random类和BigDecimal类

7.3.3 Math类

Java提供了最简单加、减、乘、除、取模等基本运算。同时还提供了Math类来进行更复杂的数学运算。

static abs(Xxx xx):将基本数据类型转换成其绝对值返回。

<< < 1 2 3 4 5 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言