`
天空之城
  • 浏览: 408165 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对BigDecimal常用方法的归类

    博客分类:
  • Java
 
阅读更多
package com.org.assistant.util;

import java.math.BigDecimal;

public class Arith {

/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
//默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
   
//这个类不能实例化
private Arith(){
}

    /**
     * 提供精确的加法运算。
     * @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();
    }
   
   /**
    * 提供精确的类型转换(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);
} 
}
分享到:
评论

相关推荐

    Java对BigDecimal常用方法的归类 -计算机等级考试-考试吧

    JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.

    Java对BigDecimal常用方法的归类(加减乘除).doc

    Java 中 BigDecimal 的常用方法归类(加减乘除) Java 中的 BigDecimal 类提供了对浮点数的精确运算,包括加减乘除和四舍五入等操作。在 Java 中,简单类型不能够精确地对浮点数进行运算,因此需要使用 BigDecimal ...

    数据挖掘贝叶斯——一种实现

    该类的实现同本人转载的一篇博文:对BigDecimal常用方法的归类中的Arith类相同。 数据挖掘贝叶斯算法的Java实现可以用于小规模数据集的实验和测试,但不适合用于工程应用。如果需要应用于大规模数据集或工程应用,...

    嵌入式虚拟机_物联网应用_EVM_1741161865.zip

    物联网实战项目

    Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测(含模型描述及示例代码)

    内容概要:文章介绍了基于Matlab的PSO-LSTM(粒子群算法优化长短期记忆神经网络)实现多输入分类预测的完整流程。针对大数据时代背景下金融、医疗、能源等行业面临的多变量时序数据分析挑战,传统机器学习方法难以有效捕捉数据间的时序依赖性和长期依赖关系。LSTM虽能很好应对长期依赖性问题,却因自身超参数优化难题限制性能发挥。为此,文中提出了融合PSO与LSTM的新思路。通过粒子群优化算法自动化选取LSTM的最优超参数配置,在提高预测精度的同时,加速模型训练过程。项目详细展示了该方法在金融预测、气象预报等多个领域的应用前景,并用具体代码实例演示了如何设计PSO-LSTM模型,其中包括输入层接收多输入特征、经由PSO优化超参数设定再进入LSTM层完成最终预测输出。 适用人群:从事机器学习、深度学习研究的专业人士或研究生,尤其是专注于时间序列数据挖掘以及希望了解如何利用进化算法(如PSO)优化神经网络模型的研究人员。 使用场景及目标:①对于具有多维度时序特性的数据集,本模型可用于精准分类预测任务;②旨在为不同行业的分析师提供一种高效的工具去解决实际问题中复杂的时变关系分析;③通过案例代码的学习使开发者掌握创建自己的PSO-LSTM模型的技术,从而实现在各自专业领域的高准确性预测。 其他说明:需要注意的是,在具体实施PSO-LSTM算法过程中可能会遇到诸如粒子群算法的收敛问题、LSTM训练中的梯度管理以及数据集质量问题等挑战,文中提及可通过改进优化策略和加强前期准备工作予以解决。此外,由于计算成本较高,还需考虑硬件设施是否足够支撑复杂运算需求。

    三菱FX5U PLC与台达DT330温控器通讯程序:实现设定温度、读取温度及输出启停控制功能的稳定可靠解决方案,三菱FX5U与台达DT330温控器通讯程序详解:通过PLC与触摸屏实现精确温度控制与启停

    三菱FX5U PLC与台达DT330温控器通讯程序:实现设定温度、读取温度及输出启停控制功能的稳定可靠解决方案,三菱FX5U与台达DT330温控器通讯程序详解:通过PLC与触摸屏实现精确温度控制与启停操作,三菱FX5U与台达DT330温控器通讯程序+输出启停控制(SL5U-9) 功能:通过三菱FX5U本体485口,结合触摸屏网口,实现对台达DT330温控器 设定温度,读取温度,输出启停控制。 反应灵敏,通讯稳定可靠。 器件:三菱FX5U PLC,台达DT330温控器,昆仑通态TPC7022NI触摸屏。 说明:的是程序,带注释,带温控器手册,接线,参数设置都提供。 通讯稳定可靠,实用有效。 ,三菱FX5U; 通讯程序; 输出启停控制; 温度控制; 触摸屏接口; 温控器手册; 参数设置。,三菱FX5U与台达DT330温控器通讯启停控制程序

    无人机辅助认知无线传感网络中协作频谱感知的Python实现(含详细代码及解释)

    内容概要:本文介绍了论文“Efficient Cooperative Spectrum Sensing in UAV-Assisted Cognitive Wireless Sensor Networks”的复现实现,重点涉及系统模型建立、信号检测与投票规则的实现及其仿真实验。文章提供了四个关键组成部分的具体实现步骤:首先是参数设置,包括仿真参数的配置;接着是信号模型与能量检测,涵盖信号的存在与否的判定逻辑;第三部分是实现四种投票规则(CVR、SVR、S1 和 DS1)的细节;最后一部分展示了仿真实验的方法,并通过绘制检测性能图和样本大小图来比较不同投票规则的效用。 适用人群:适用于具有基本编程能力并且对无线传感网络频谱感知研究感兴趣的科研人员和技术爱好者。 使用场景及目标: ① 探索不同频谱感知投票规则的表现; ② 提供具体的编程范例帮助理解和实施合作频谱感知道; ③ 分析多种投票算法下的最优方案; ④ 评估无人机辅助环境下频谱检测的实际效果。 其他说明:本文不仅实现了原始论文的技术路线,还探讨了一些可能的改进方向,如增强信号模型、分析投票规则复杂度、参数灵敏性分析、引入机器学

    win32汇编环境,窗口程序使用树形视图示例二

    win32汇编环境,窗口程序使用树形视图示例二

    【公司年会抽奖程序html开箱下载即用】

    公司年会抽奖程序可定制化的抽奖应用,炫酷3D球体,可用于年会抽奖等活动,支持奖品、人员、界面、图片音乐配置。

    COMSOL模拟锂枝晶生长过程:电势场与流场耦合影响枝晶形貌,基于Comsol模拟的锂枝晶生长与流场耦合电势场模型:浓度场变化对枝晶形貌的影响研究,comsol 锂枝晶加流动耦合电势场模型,浓度场生长

    COMSOL模拟锂枝晶生长过程:电势场与流场耦合影响枝晶形貌,基于Comsol模拟的锂枝晶生长与流场耦合电势场模型:浓度场变化对枝晶形貌的影响研究,comsol 锂枝晶加流动耦合电势场模型,浓度场生长过程中添加流场,改变枝晶形貌。 ,关键词:COMSOL; 锂枝晶; 流动耦合; 电势场模型; 浓度场生长; 流场控制; 枝晶形貌变化。,COMSOL锂枝晶流场耦合电势模型

    TM_TM104SDHG30_V2.0.pdf

    TM_TM104SDHG30_V2.0

    物联网云平台基础架构_Shiro权限管理_通用CURD_服务_1741161944.zip

    物联网云平台基础架构_Shiro权限管理_通用CURD_服务_1741161944

    智能家居_Qt_跨平台客户端_家居管理_1741167066.zip

    智能家居_Qt_跨平台客户端_家居管理_1741167066.zip

    基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    delphi 实现的 走马灯效果.rar

    使用delphi 12 实现的走马灯

    基于标准IEEE 33节点配电网的Simulink建模:有参考文献及数据来源,可输出节点电压电流数据用于潮流计算与风光并网研究,基于标准IEEE 33节点配电网的Simulink建模:数据驱动的潮流计

    基于标准IEEE 33节点配电网的Simulink建模:有参考文献及数据来源,可输出节点电压电流数据用于潮流计算与风光并网研究,基于标准IEEE 33节点配电网的Simulink建模:数据驱动的潮流计算与风光并网研究,标准IEEE33节点配电网, simulink建模,有参考文献,有数据来源。 可输出节点电压、电流数据,适用于潮流计算,在此基础上可实现风光并网研究。 ,核心关键词:标准IEEE33节点配电网; Simulink建模; 参考文獻; 数据来源; 输出节点电压电流数据; 潮流计算; 风光并网研究。,IEEE33节点配电网Simulink建模:数据驱动的潮流计算与风光并网研究

    用于非线性时间序列预测的稀疏局部线性和邻域嵌入 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    物联网分布式消息平台_CMQ_海量接入_实时通信_1741163912.zip

    物联网实战项目

    三菱FX3U与欧姆龙E5CC温控器通讯实战:全方位控制及稳定通讯程序,三菱FX3U与欧姆龙E5CC温控器通讯实战:多功能设置与监控程序实战操作,PLC通讯调试解析,三菱FX3U与欧姆龙E5CC温控器通

    三菱FX3U与欧姆龙E5CC温控器通讯实战:全方位控制及稳定通讯程序,三菱FX3U与欧姆龙E5CC温控器通讯实战:多功能设置与监控程序实战操作,PLC通讯调试解析,三菱FX3U与欧姆龙E5CC温控器通讯实战程序 功能:通过昆仑通态触摸屏,三菱FX3U 485BD板,实现对欧姆龙E5CC温控器 设定温度值,读取实际温度,设定探头类型,设定报警值,设定报警类型,报警上下限功能。 反应灵敏,通讯稳定可靠。 器件:三菱FX3U PLC,FX3U 485BD,欧姆龙E5CC RX2ASM 802温控器,昆仑通态TPC7062KD触摸屏。 附送威纶通程序 说明:是程序,带注释,带温控器手册,接线,参数设置都提供。 通讯稳定可靠,实用有效。 ,核心关键词:三菱FX3U; 欧姆龙E5CC温控器; 昆仑通态触摸屏; 485BD板; 设定温度值; 读取实际温度; 探头类型设定; 报警值设定; 报警类型设定; 报警上下限功能; 通讯稳定可靠; 威纶通程序; 参数设置。,三菱FX3U与欧姆龙E5CC温控器通讯程序:实现温度控制与报警功能的实战指南

    基于Boost型PFC与移相全桥AC-DC电源设计的仿真研究:前级PFC平均电流控制与后级移相控制技术分析,基于Boost型PFC与移相全桥AC-DC电源设计仿真-10kW功率的电压可调600V电源

    基于Boost型PFC与移相全桥AC-DC电源设计的仿真研究:前级PFC平均电流控制与后级移相控制技术分析,基于Boost型PFC与移相全桥AC-DC电源设计仿真——10kW功率的电压可调600V电源系统设计与应用,基于Psim的Boost型 PFC+移相全桥AC-DC电源设计仿真 1、前级电网输入220AC,50Hz,中间级母线电压为600V,后级600V输入,547V输出,电压可调,功率10kW 2、前级基于Boost电路PFC,平均电流控制,电压电流双闭环 3、后级全桥内移相和不控整流,移相控制,单电压环 4、有简要的电路参数设计 ,基于Psim的Boost型PFC; 移相全桥AC-DC电源设计; 220AC输入; 50Hz; 600V母线电压; 电压可调的10kW功率输出; Boost电路PFC; 平均电流控制; 电压电流双闭环控制; 全桥内移相控制; 不控整流; 移相控制单电压环; 电路参数设计。,基于Boost型PFC与移相全桥AC-DC电源设计的仿真研究

Global site tag (gtag.js) - Google Analytics