【工具类】double

2023-11-02

    //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;

    //默认的保留位数
    private static DecimalFormat df = new DecimalFormat("0.00");

    /**
     * 提供精确的加法运算。
     *
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */
    public static double add(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }

    /**
     * 提供精确的减法运算。
     *
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */
    public static double sub(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 提供精确的乘法运算。
     *
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */
    public static double mul(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
     * 小数点以后10位,以后的数字四舍五入。
     *
     * @param v1 被除数
     * @param v2 除数
     * @return 两个参数的商
     */
    public static double div(double v1, double v2) {
        return div(v1, v2, DEF_DIV_SCALE);
    }

    /**
     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
     * 定精度,以后的数字四舍五入。
     *
     * @param v1    被除数
     * @param v2    除数
     * @param scale 表示表示需要精确到小数点以后几位。
     * @return 两个参数的商
     */
    public static double div(double v1, double v2, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException(
                    "The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 提供精确的小数位四舍五入处理。
     *
     * @param v     需要四舍五入的数字
     * @param scale 小数点后保留几位
     * @return 四舍五入后的结果
     */
    public static double round(double v, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException(
                    "The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }


    /**
     * 将含有科学计数法的数组转换为字符串,可以去除科学计数法
     *
     * @param v 需要转换的数字
     * @return 转换后的结果
     */
    public static String doubleToString(double v) {
        NumberFormat NF = NumberFormat.getInstance();
        //设置数的小数部分所允许的最大位数,避免小数位被舍掉
        NF.setMaximumFractionDigits(15);
        //设置数的小数部分所允许的最小位数,避免小数位有多余的0
        NF.setMinimumFractionDigits(0);
        //去掉科学计数法显示
        String result = NF.format(v);
        return result;
    }

    /**
     * 按照格式保留几位
     *
     * @param money  double数
     * @param format 格式
     * @return
     */
    public static double format(double money, String format) {
        if (format != null && format != "") {
            df = new DecimalFormat(format);
        }
        double moneyformat = new Double(df.format(money).toString());
        return moneyformat;
    }


    /**
     * 提供精确的类型转换(Float)
     *
     * @param v 需要被转换的数字
     * @return 返回转换结果
     */
    public static float convertsToFloat(double v) {
        BigDecimal b = new BigDecimal(v);
        return b.floatValue();
    }

    /**
     * 提供精确的类型转换(Int)不进行四舍五入
     *
     * @param v 需要被转换的数字
     * @return 返回转换结果
     */
    public static int convertsToInt(double v) {
        BigDecimal b = new BigDecimal(v);
        return b.intValue();
    }

    /**
     * 提供精确的类型转换(Long)
     *
     * @param v 需要被转换的数字
     * @return 返回转换结果
     */
    public static long convertsToLong(double v) {
        BigDecimal b = new BigDecimal(v);
        return b.longValue();
    }

    /**
     * 返回两个数中大的一个值
     *
     * @param v1 需要被对比的第一个数
     * @param v2 需要被对比的第二个数
     * @return 返回两个数中大的一个值
     */
    public static double returnMax(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.max(b2).doubleValue();
    }

    /**
     * 返回两个数中小的一个值
     *
     * @param v1 需要被对比的第一个数
     * @param v2 需要被对比的第二个数
     * @return 返回两个数中小的一个值
     */
    public static double returnMin(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.min(b2).doubleValue();
    }

    /**
     * 精确对比两个数字
     *
     * @param v1 需要被对比的第一个数
     * @param v2 需要被对比的第二个数
     * @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
     */
    public static int compareTo(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.compareTo(b2);
    }

    /**
     * 格式化double
     *
     * @param arg0
     * @param num
     * @return
     */
    public static String doubleFormat(double arg0, Integer num) {
        DecimalFormat df = new DecimalFormat("####.00");
		/*DecimalFormat df2 = new DecimalFormat("##.00%");
		DecimalFormat df3 = new DecimalFormat("###,##0.00");*/
        if (num != null) {
            if (num == 1) {
                df = new DecimalFormat("####.0");
            } else if (num == 2) {
                df = new DecimalFormat("####.00");
            } else if (num == 3) {
                df = new DecimalFormat("####.000");
            } else if (num == 4) {
                df = new DecimalFormat("####.0000");
            }
        } else {
            df = new DecimalFormat("####");
        }

        if (df.format(arg0).contains(".")) {
            if (df.format(arg0).substring(0, df.format(arg0).indexOf(".")).length() <= 0) {
                df = new DecimalFormat("0.00");
                if (num != null) {
                    if (num == 1) {
                        df = new DecimalFormat("0.0");
                    } else if (num == 2) {
                        df = new DecimalFormat("0.00");
                    } else if (num == 3) {
                        df = new DecimalFormat("0.000");
                    } else if (num == 4) {
                        df = new DecimalFormat("0.0000");
                    }
                } else {
                    df = new DecimalFormat("0");
                }
            }
        }
        return df.format(arg0);
    }

    /**
     * 百分比格式化
     *
     * @param arg0
     * @param num
     * @return
     */
    public static String percentageFormat(double arg0, Integer num) {
        DecimalFormat df = new DecimalFormat("##.00%");
        if (num != null) {
            if (num == 1) {
                df = new DecimalFormat("####.0%");
            } else if (num == 2) {
                df = new DecimalFormat("####.00%");
            } else if (num == 3) {
                df = new DecimalFormat("####.000%");
            } else if (num == 4) {
                df = new DecimalFormat("####.0000%");
            }
        } else {
            df = new DecimalFormat("####%");
        }
        if (df.format(arg0).contains(".")) {
            if (df.format(arg0).substring(0, df.format(arg0).indexOf(".")).length() <= 0) {
                df = new DecimalFormat("0.00%");
                if (num != null) {
                    if (num == 1) {
                        df = new DecimalFormat("0.0%");
                    } else if (num == 2) {
                        df = new DecimalFormat("0.00%");
                    } else if (num == 3) {
                        df = new DecimalFormat("0.000%");
                    } else if (num == 4) {
                        df = new DecimalFormat("0.0000%");
                    }
                } else {
                    df = new DecimalFormat("0%");
                }
            }
        }
        return df.format(arg0);
    }

    /**
     * double每三位短号分割
     *
     * @param arg0
     * @param num
     * @return
     */
    public static String splitNumberFormat(double arg0, Integer num) {
        DecimalFormat df = new DecimalFormat("###,##0.00");
        if (num != null) {
            if (num == 1) {
                df = new DecimalFormat("###,##0.0");
            } else if (num == 2) {
                df = new DecimalFormat("###,##0.00");
            } else if (num == 3) {
                df = new DecimalFormat("###,##0.000");
            } else if (num == 4) {
                df = new DecimalFormat("###,##0.0000");
            }
        } else {
            df = new DecimalFormat("###,###");
        }
        return df.format(arg0);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【工具类】double 的相关文章

  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • vue实现高德地图点聚合功能

    效果截图展示 高德地图点聚合功能 1 创建地图 new AMap Map 示例 this map new AMap Map container resizeEnable true 是否监控地图容器尺寸变化 center 105 34 初始化
  • 终于来了!耗时268天,7大模块、2983页58万字,Android开发核心知识笔记!对标阿里P7!

    版权声明 本文为博主原创文章 未经博主允许不得转载 https www jianshu com u 3348b92f77a4 前言 转眼就快到 金九银十 又是个面试求职的黄金期 近来许多网友都在求一份完整 系统的学习资料和最新的大厂面试真题
  • Objective-C中的@dynamic

    Objective C中的 dynamic 一 dynamic与 synthesize的区别 property有两个对应的词 一个是 synthesize 一个是 dynamic 如果 synthesize和 dynamic都没写 那么默认
  • 【Linux】线程池

    文章目录 1 线程池概念 2 线程池的优点 3 线程池的应用场景 4 线程池的实现 5 STL和智能指针和线程安全 5 1其他常见锁 5 2读写锁 1 线程池概念 线程池是一种线程使用模式 线程过多会带来调度开销 进而影响缓存局部性和整体性
  • Linux UDP编程流程

    文章目录 UDP编程流程 UDP协议无连接的特点 UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接 不可靠的 数据报服务 服务器端和客户端没有什么本质上的区别 编程流程如下 socket 用来创建套接字 使用 udp 协议时
  • 友盟埋点详解

    数据埋点让产品或运营等相关人员能按照具体的需求 定制性地统计较为复杂的用户数据 例如想要追踪用户的行为 观察页面相关点击数据 关键路径转化率 分析某个事件活动效果时 就需要事先进行数据埋点 关于友盟的初始化配置不是此文的重点 网上一搜一堆的
  • Pycharm配置——解释器(interpreter)

    今天打开pycharm运行一段代码 结果遇到了这个问题 以上应该是没有配置解释器的问题 那我是怎么解决这个问题的呢 1 打开文件 File 2 打开设置 Setting 3 打开新project的默认设置 4点击project Interp
  • vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(二)

    五 MassMarks海量点标记 let mass 此处我定义了6种海量点图标 此处url我用的是项目中本地引入的图片 也可以填在线url链接 props infoList是项目后端返回的所有点的信息数组 其中每个点对象有个style字段
  • ArcGIS Pro 一打开Notebook笔记本工具软件就崩溃(停止运行)

    先说结论 如果对于ArcGIS Pro的笔记本工具 包括新建 添加 打开等一切操作 只要一点开 ArcGIS Pro就停止运行 一个可能的原因是Temp文件夹或者是其他文件的路径中有中文 可以尝试将路径修改为全英文 再次运行 其实这个问题是
  • 程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程

    可执行文件只有装载到内存以后才能被CPU执行 1 进程虚拟地址空间 程序和进程有什么区别 程序 或者狭义上讲可执行文件 是一个静态的概念 它就是一些预先编译好的指令和数据集合的一个文件 进程则是一个动态的概念 它是程序运行时的一个过程 很多
  • centos开放端口号的常用命令

    1 开放端口 firewall cmd zone public add port 5672 tcp permanent 开放5672端口 firewall cmd zone public remove port 5672 tcp perma
  • spring cloud项目升级spring boot 2.0爬过的坑

    注 升级后spring boot为2 0版本 spring cloud为Finchley M8版本 2 0官方文档地址 https docs spring io spring boot docs current reference html
  • 活动报名丨LLaMA一作:如何构建开源高效的基础语言模型(智源Live 38期)

    4月26日 星期三 下午16 00 17 30 智源LIVE 第38期 线上活动上 Meta AI研究科学家 LLaMA一作Hugo Touvron将分享 LLaMA Open and Efficient Foundation Langua
  • DOM4J对SOAP的返回信息解析

    用DOM4J的XML解析式拿不到节点的 所以网上利用DOM4J提供的VisitorSupport解决此问题 不废话 直接看代码 package com starhub util import org dom4j Document impor
  • 7个超好用的测试框架(总有一款适合你)

    昨天吃饭的时候和同事聊到测试框架 于是决定根据自己的实战工作经验总结一波好用的测试框架 本来文章里一共11个的 最后想想还是剔除掉了Maxim Cypress Gauge和ZTF Zentao Testing Framework 工具在精而
  • 【Python系列】eval 函数

    文章目录 1 基本概念 2 使用举例 3 eval 函数运用 计算器 4 不要滥用 eval 1 基本概念 eval 是 python 中功能非常强大的一个函数 将字符串当成有效的表达式来求值 并返回计算结果 所谓表达式就是 eval 这个
  • PyTorch深度学习实战(9)——学习率优化

    PyTorch深度学习实战 9 学习率优化 0 前言 1 学习率简介 2 梯度值 学习率和权重之间的相互作用 3 学习率优化实战 3 1 学习率对缩放后的数据集的影响 3 2 学习率对未缩放数据集的影响 小结 系列链接 0 前言 学习率 l
  • C++中的堆和栈

    堆栈其实是两种数据结构 堆栈都是一种数据项按序排列的数据结构 只能在一端 称为栈顶 top 对数据项进行插入和删除 要点 堆 顺序随意 栈 后进先出 Last In First Out 堆和栈的区别 一 预备知识 程序的内存分配 一个由C
  • 开源软件推介

    ag Grid 是一个企业级的 JavaScript 数据网格 ag Grid 的目的是提供可用于构建企业级应用的表格 例如报告和数据分析 业务流程和数据输入的数据表格 ag Grid 每一个功能的文档至少有一个例子来展示该功能 功能特性
  • 【工具类】double

    默认除法运算精度 private static final int DEF DIV SCALE 10 默认的保留位数 private static DecimalFormat df new DecimalFormat 0 00 提供精确的加