package numTest;
import java.math.BigDecimal;
/**
* 高精度计算辅助类,提供保留指定小数位的简单计算和四舍五入
*/
public class Num {
private static final BigDecimal one = new BigDecimal(1);
private BigDecimal decimal;
private int scale;
private int roundingMode = BigDecimal.ROUND_HALF_UP;
public Num() {
decimal = new BigDecimal(0);
}
public Num(double val) {
this.decimal = new BigDecimal(val);
}
/* public Num(double val, int scale) {
this.scale = scale;
this.decimal = new BigDecimal(val).setScale(scale, roundingMode);
}*/
public Num(double val, int scale, int roundingMode) {
this.scale = scale;
this.roundingMode = roundingMode;
this.decimal = new BigDecimal(val).setScale(scale, roundingMode);
}
public Num(Num num, int scale, int roundingMode) {
decimal = num.decimal.setScale(scale, roundingMode);
}
public BigDecimal getDecimal() {
return decimal;
}
public Num setDecimal(BigDecimal decimal) {
this.decimal = decimal;
return this;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
this.decimal = this.decimal.setScale(scale);
}
public double doubleValue() {
return decimal.doubleValue();
}
public Num divide(Num num) {
return divide(setOtherNum(num), scale, roundingMode);
}
public Num divide(double val) {
Num num = new Num(val);
return divide(num);
}
public Num divide(Num num, int scale) {
return divide(num, scale, roundingMode);
}
public Num divide(Num num, int scale, int roundingMode) {
return setDecimal(this.getDecimal().divide(num.getDecimal(), scale, roundingMode));
}
public Num multiply(Num num) {
return multiply(setOtherNum(num), scale, roundingMode);
}
public Num multiply(double val) {
Num num = new Num(val);
return multiply(num);
}
public Num multiply(Num num, int scale) {
return multiply(num, scale, roundingMode);
}
public Num multiply(Num num, int scale, int roundingMode) {
return setDecimal(rounding(this.getDecimal().multiply(num.getDecimal()), scale, roundingMode));
}
public Num add(Num num) {
return add(setOtherNum(num), scale, roundingMode);
}
public Num add(double val) {
Num num = new Num(val);
return add(num);
}
public Num add(Num num, int scale) {
return add(num, scale, roundingMode);
}
public Num add(Num num, int scale, int roundingMode) {
return setDecimal(rounding(this.getDecimal().add(num.getDecimal()), scale, roundingMode));
}
public Num sub(Num num) {
return sub(setOtherNum(num), scale);
}
public Num sub(double val) {
Num num = new Num(val);
return sub(num);
}
public Num sub(Num num, int scale) {
return sub(num, scale, roundingMode);
}
public Num sub(Num num, int scale, int roundingMode) {
BigDecimal result = this.getDecimal().subtract(num.getDecimal());
result = rounding(result, scale, roundingMode);
return setDecimal(result);
}
private Num setOtherNum(Num num) {
num = new Num(num, scale, roundingMode);
return num;
}
public double round(int scale) {
return rounding(this.decimal, scale, roundingMode).doubleValue();
}
public double round(int scale, int roundingMode) {
return rounding(this.decimal, scale, roundingMode).doubleValue();
}
public static BigDecimal rounding(BigDecimal decimal, int scale, int roundingMode) {
return decimal.divide(one, scale, roundingMode);
}
public static BigDecimal rounding(BigDecimal decimal, int scale) {
return rounding(decimal, scale, BigDecimal.ROUND_HALF_UP);
}
public static double rounding(double val, int scale) {
return rounding(val, scale, BigDecimal.ROUND_HALF_UP);
}
public static double rounding(double val, int scale, int roundingMode) {
return rounding(new BigDecimal(val), scale, roundingMode).doubleValue();
}
@Override
public String toString() {
return "Num [decimal=" + decimal + ", scale=" + scale + ", roundingMode=" + roundingMode + "]";
}
}
相关推荐
《深入浅出数字信号处理》前言
以本博原创内容为框架的图书《深入浅出数字信号处理》2012年已经由北京航空航天大学出版社出版发行,以下是图书前言。 数字信号处理(Digital Signal Processing, DSP)是当前科学和工程领域最为热门的技术之一,广泛应用于通信、雷达
数字处理方法
题目:给一个不多于五位的正整数,要求: 求出他几位数 分别输出每一位数字; 按逆序输出各位数字,例如原数为321,应输出123. 源代码: #include <math.h> int Di(int n) { int x=0; while (n!=0) { n=n/10; x++; } return x; } int Out(int num) { if(...
手写数字识别案例、手写数字图片处理
python_手写数字识别案例、手写数字图片处理 #1、手写数字识别案例 步骤: 收集数据 带有标签的训练数据集来源于trainingDigits文件夹里面所有的文件,接近2000个文件,每个文件中有32*32的二维数组,由01构成,文件名称就是该文件数据对应的标签类型(即一个数字)。 处理数据使其符合算法要求 最终我们要求是一个二维数组作为数据源,所以需要将每一个文件对应的特征数据处理成一行,...
C# 扩展方法应用一:中文处理
声明:本文改自另外一篇fg
数字图像处理-总览
数字图像处理(digital image processing)思维导图: 数字图像处理的基本步骤:图像处理的主要两个类别:1. 输入和输出都是图像;2. 输入可能是图像但是输出是从这些图像中提取的属性。具体步骤流程图如下: 图像获取:图像获取与给出一幅数字形成的图像一样简单,通常,图像获取阶段包括图像预处理,例如图像缩放。 图像增强:是对一幅图像进行某种操作,使其结果在特定应用中比原始图像更适合进行处理。特定一词在这里很重要,以为一开始增强技术就建立在面向问题的基础之上。没有图像增强的通用“理论”。
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类、使用方括号索引根据起始索引抽取字符串内容的子字符串(如果只有一个数字默认索引到字符串结束)
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类、使用方括号索引根据起始索引抽取字符串内容的子字符串(如果只有一个数字默认索引到字符串结束)
数字信号处理
数字信号处理第一章、数字信号处理概述主要研究内容常用的术语:数字信号处理的流程为什么采用数字信号处理数字信号的优势理解数字信号的三把钥匙第二章、离散时间信号2.1 信号的基本概念2.1.3 信号的分类2.2 信号的时域描述离散时间信号 x(n)x(n)x(n) 的表示法1. 公式表达2. 按次序排列的集合3. 图示法典型信号 第一章、数字信号处理概述 主要研究内容 信号的采集,包括模/数变换技术、采样定理等 离散时间信号的分析,包括时域及频率分析、离散傅里叶变换等 离散系统的分析,包括差分方程、单位冲激响
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类、slice函数根据起始索引抽取字符串内容的子字符串(如果只有一个数字默认索引到字符串结束)
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类、slice函数根据起始索引抽取字符串内容的子字符串(如果只有一个数字默认索引到字符串结束)
【图像处理】数字图像处理简介
目录 1.介绍 2.模拟图像处理 3.数字图像处理 4.什么是图像 5.数字图像和信号之间的关系 信号 关系 6.如何形成数字图像 7.应用 机器/计算机视觉 计算机图形学 人工智能 信号处理 1.介绍 数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像处理的产生...
数字信号处理——绪论总结
数字信号处理绪论总结,包括介绍背景;信号处理、数字信号处理;数字信号处理学科概览;数字信号处理的特点;数字信号处理的局限性;数字信号处理的应用。
数字信号处理——全面教学课件
本文还有配套的精品资源,点击获取 简介:《数字信号处理》是电子工程领域中研究信号分析、处理和变换的重要课程。本课程内容深入,包括傅里叶变换、z变换和数字滤波器设计,为通信、音频和图像处理等领域的核心技术。课件涵盖理论知识及实际应用案例,如信号去噪中的傅里叶变换应用和数字滤波器设计步骤,旨在帮助学生掌握数字信号处理的基本理论与实用技术,为深入研究信号处理和通信系统打下基础。资...
《数字信号处理(DSP)》学习总结
一、什么是数字信号处理? 任何携带信息的物理量都可称为信号。我们的日产生活中到处都充满了信号,其中,有些信号是自然的,有些信号是人为的,有些信号是必需的(如语音信号),有些信号是让人愉悦的(如音乐信号),当然还有些信号是不需要的,甚至是有害的(比如工地施工产生的噪音)。因此,从一个错综复杂的信号中提取或增强有用的信号,同时抑制其中的有害或无用的信号,是数字信号处理的一种最为直接而简单的表述形...
AltiumDesigner 09安装过程破解问题 .
首先分享一下破解文件,网上总是下载不到,好不容易下载到了,放在网盘上,有需要的自取。AltiumDesigner 09破解文件。链接:https://pan.baidu.com/s/1ZGvbR_6T51hpcaFbQiMX5w 密码:qwvaAltiumDesigner 09安装安装文件,比较大,包含破解文件:链接:https://pan.baidu.com/s/1mfgragB519jpGfR...
【数字信号处理】数字信号处理简介 ( 数字信号处理技术 | 傅里叶变换 )
一、数字信号处理技术、 二、傅里叶变换 ( 时域转频域 )
增程式永磁电机发电系统电压环二自由度控制器设计
本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高
解读文献(五)------基于阻抗控制
文章目录背景主动柔顺控制阻抗控制基于力的阻抗控制基于位置的阻抗控制力位混合控制 背景 主动柔顺控制 阻抗控制 基于力的阻抗控制 基于位置的阻抗控制 力位混合控制 ...
什么是数字信号处理 (DSP)?
哈佛架构的主要优点是数据和指令都有单独的总线,因此 CPU 可以同时检索读取或写入数据和指令。数字信号处理 (DSP) 是工程和应用数学的一个分支,涉及数字信号的处理和分析。数字信号处理器由数字信号中使用的不同信号组成,例如音频、语音、温度和视频处理,然后对数字信号处理器进行数学处理。冯·诺依曼的架构由单个存储器和单个总线组成,用于将数据传入和传出 数字信号处理器的 CPU(中央处理器)。:DSP 系统对于处理雷达和声纳信号非常重要,用于国防、航空和其他各个领域的目标检测、跟踪、距离估计和干扰缓解。
r语言svr模型_R语言初探强化学习中的马尔可夫模型
强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以...
Java-数字处理类
Java-数字处理类
SMPTE ST 2110 概论(一)
SMPTE ST 2110 概论(一)前言ST 2110与ST 2022-6ST 2110-10:基本结构与时序ST 2110-20:未压缩的视频流后续 前言 这是一份我在实习期间制作的,关于SMPTE ST 2110的简单介绍。 这篇文章主要以梳理总结 SMPTE ST 2110 的概念为主,关于具体的内容,比如IP数据报的格式、RTP时间戳的具体代码内容等等,大家可以查阅 SMPTE ST 2...
跨平台CMake AutoSAR
AutoSAR是汽车行业采用的一种软件架构标准,它旨在提供一个通用的软件平台,使得汽车软件的开发和集成变得更加高效和灵活。总结一下,CMake AutoSAR是一个强大的跨平台工具,为AutoSAR开发提供了便利。通过简单的配置文件和命令,开发人员可以实现高效、灵活的跨平台开发,并加快自动驾驶系统的开发进程。上述示例中,我们定义了一个名为AutoSAR的项目,指定了源代码文件的路径和依赖库的路径。通过简单的配置文件和命令,开发人员可以实现高效、灵活的跨平台开发,并加快自动驾驶系统的开发进程。
数字信号处理复习总结
数字信号处理复习总结@TOC 复习前言 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录复习前言前言基本概念信号的分类傅里叶变换数字滤波器数字信号处理的发展趋势 前言 从今天正式开始了数字信号处理这一门课的复习,因为疫情,我们学校上学期的期末考试推迟到本学期,所以刚开学所有精力都放在了备战期末复习上,对本学期新开的课程并未好好跟着老师的进度。我学习的教材版本是由高西全、丁玉美编著的《数字信号处理》第四版。 本书由三个部分组成:离散时间信号和系统的时域描述分析、傅里叶变换以及数字
基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计
一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)
计算机中数字信号定义,数字信号处理
数字信号处理(信息与通信工程学科)语音编辑锁定讨论上传视频《数字信号处理》机械工业出版社2012年发行,杨毅明著。《数字信号处理》这门课介绍的是:将事物的运动变化转变为一串数字,并用计算的方法从中提取有用的信息,以满足我们实际应用的需求。中文名数字信号处理外文名Digital Signal Process含义信号数字化处理先修课程信号与系统数字信号处理内容简介编辑语音本定义来自《数字信号处...
MAC-H3C官网inode客户端下载安装
MAC-H3C官网inode客户端下载安装
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
前端开发之处理数字的方法合集
处理数字是前端开发中常见的任务之一。通过使用格式化、转换和校验等方法,我们可以对数字进行各种操作,满足不同的业务需求。在实际开发中,根据具体需求选择适合的方法,并注意处理边界情况和错误处理,以确保数字的正确性和可靠性。
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
7772



被折叠的 条评论
为什么被折叠?



