首页 > 编程语言 >Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方)

Java中进行高精准度坐标数据计算使用BigDecimal(计算距离、开平方)

时间:2023-05-04 09:46:01浏览次数:42  
标签:deviation 开平方 Java BigDecimal param return 精准度 new

场景

Java中使用java.awt.geom.Point2D进行坐标相关的计算(距离、平方等):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126072919

Java中使用JTS对空间几何计算(读取WKT、距离、点在面内、长度、面积、相交等):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126302894

上面讲的进行精度要求底的数据进行空间计算时,可以使用Double进行赋值。

如果坐标数据精度比较高,比如到小数点后8位等,则需要使用BigDecimal进行赋值和计算。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

使用BigDecimal进行指定精度计算距离,比如指定到小数点后5位。

    /**
     * 使用BigDecimal 指定精确度计算距离
     * @param p1x 第一个点的x
     * @param p2x 第二个点的x
     * @param p1y 第一个点的y
     * @param p2y 第二个点的y
     * @return
     */
    public BigDecimal getDistanceByBigDecimal(double p1x, double p2x, double p1y, double p2y){
        BigDecimal p1xB = new BigDecimal(p1x);
        BigDecimal p2xB = new BigDecimal(p2x);
        BigDecimal p1yB = new BigDecimal(p1y);
        BigDecimal p2yB = new BigDecimal(p2y);
        BigDecimal bigDecimal = (p1xB.subtract(p2xB)).multiply(p1xB.subtract(p2xB)).add((p1yB.subtract(p2yB)).multiply(p1yB.subtract(p2yB)));
        BigDecimal distance = sqrt(bigDecimal,5);
        return distance;
    }

其中又用到开平方的方法

    /**
     * BigDecimal 开平方
     * @param value 要开平方的值
     * @param scale 精确度
     * @return
     */
    public BigDecimal sqrt(BigDecimal value, int scale){
        if(value.compareTo(new BigDecimal(0)) == 0){
            return new BigDecimal(0);
        }else {
            BigDecimal num2 = BigDecimal.valueOf(2);
            int precision = 100;
            MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);
            BigDecimal deviation = value;
            int cnt = 0;
            while (cnt < precision) {
                deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc);
                cnt++;
            }
            deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP);
            return deviation;
        }
    }

 

标签:deviation,开平方,Java,BigDecimal,param,return,精准度,new
From: https://www.cnblogs.com/badaoliumangqizhi/p/17370158.html

相关文章

  • java 数组操作
    去重List<PolicySalaryVO>policySalaryVO=policySalaryDTOList.stream().map(PolicySalaryVO::new).collect(Collectors.collectingAndThen(Collectors.toCollection(()->newTreeSet<>(Comparator.comparing(PolicySalaryVO::getType))),ArrayList::new))......
  • java-高精确处理常用的数学运算
     用于高精确处理常用的数学运算packagecom.vivo.ars.util;importjava.math.BigDecimal;/***用于高精确处理常用的数学运算*/publicclassArithmeticUtils{//默认除法运算精度privatestaticfinalintDEF_DIV_SCALE=10;/***提供精确的......
  • java基于springboot+vue非前后端分离的网上商城购物系统、在线商城管理系统,附源码+数
    1、项目介绍java基于springboot+vue非前后端分离的网上商城购物系统、在线商城管理系统,实现管理员:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理,用户;首页、个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、......
  • Java SE 20 新增特性
    JavaSE20新增特性作者:Grey原文地址:博客园:JavaSE20新增特性CSDN:JavaSE20新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_featuresSwitch类型匹配(第四次预览)在JavaSE17新增特性中,Switch类型匹配作为预览功能推出,到JavaSE20,这个......
  • java.Tang.CassNotFoundException javax.xmL.bind.DatatypeConverter
    报错如下图所示:故障原因:JAXBAPI是javaEE的API,因此在javaSE9.0中不再包含这个Jar包。java9中引入了模块的概念,默认情况下,JavaSE中将不再包含javaEE的Jar包而在java6/7/8时关于这个API都是捆绑在一起的解决方案:降低JDK版本到JDK8手动加入这些依赖......
  • java-对象在内存的运行机制
    面向对象Java是一种面向对象的编程语言。在Java中,一切都是对象,每个对象都有一组属性和方法。通过类来定义对象的属性和方法,一个类可以创建多个对象,每个对象都具有相同的属性和方法,但是它们的属性值可以不同。Java中的面向对象编程主要包括以下几个方面:封装:将对象的属性和方......
  • JAVA中的数组详解
    JAVA中的数组二维数组的静态初始化格式:数据类型[][]数组名=new数据类型[][]{{},{},{}};简化:数据类型[][]数组名={{元素1,元素2},{元素1,元素2},{元素1,元素2}};int[][]arr={{11,22},{11,22}}; 动态初始化格式:数据类型[][]数组名=new数据类型[m]......
  • 关于Java栈与堆的思考
    关于Java栈与堆的思考2009-03-2821:00:02      2.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译......
  • java 线程分类-守护线程
    java线程分类-守护线程2009-03-1117:32:57| java线程分类-守护线程  守护线程(Daemon)Java有两种Thread:“守护线程Daemon”与“用户线程User”。我们之前看到的例子都是用户,守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。从字面上我们很容易将守护线程......
  • java 栈的实现
    栈可以说是一种特殊的链表,它的主要特点是先进后出,是一种重要的数据结构,广泛应用于我们的编程之中,例如多项式求值、平衡输入和方法的调用等。实现代码如下所示:40packagecom.suznhenxing;publicclassStack{privateinttop=-1;//栈顶指针privateObject[]items;//栈中的......