java 计算工具类_java精确计算工具类

importjava.math.BigDecimal;importjava.math.RoundingMode;importjava.math.BigDecimal;importjava.text.DecimalFormat;importorg.springframework.stereotype.Component;/*** 工具类 - 运算*/@Componentpublic classArithUtils {//默认除法运算精度

private static final int DEF_DIV_SCALE = 10;privateArithUtils() {

}/*** 提供精确的加法运算。如果参数为null,则视为0处理。

*

*@paramv1

* 被加数

*@paramv2

* 加数

*@return两个参数的和*/

public static doubleadd(Double v1, Double v2) {

BigDecimal b1= new BigDecimal(Double.toString(v1==null?0D:v1));

BigDecimal b2= new BigDecimal(Double.toString(v2==null?0D:v2));returnb1.add(b2).doubleValue();

}/*** 提供精确的加法运算。

*

*@paramvs

* 加数

*@return和*/

public static doubleadd(Double... vs) {

BigDecimal b1= new BigDecimal(0);for(Double d : vs) {

BigDecimal b2= new BigDecimal(Double.toString(d==null?0D:d));

b1=b1.add(b2);

}returnb1.doubleValue();

}/*** 提供精确的减法运算。

*

*@paramv1

* 被减数

*@paramv2

* 减数

*@return两个参数的差*/

public static double sub(double v1, doublev2) {

BigDecimal b1= newBigDecimal(Double.toString(v1));

BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.subtract(b2).doubleValue();

}/*** 提供精确的乘法运算。

*

*@paramv1

* 被乘数

*@paramv2

* 乘数

*@return两个参数的积*/

public static double mul(double v1, doublev2) {

BigDecimal b1= newBigDecimal(Double.toString(v1));

BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.multiply(b2).doubleValue();

}/*** 提供精确的乘法运算。

*

*@return多个values的乘积*/

public static doublemul(Double... values) {

BigDecimal result= new BigDecimal(1);for(Double value : values){

result= result.multiply( newBigDecimal(Double.toString(value)) );

}returnresult.doubleValue();

}/*** 提供精确的乘法运算。

*

*@paramv1

* 被乘数

*@paramv2

* 乘数

*@return两个参数的积*/

public static double mul(double v1, double v2, intscale) {

BigDecimal b1= newBigDecimal(Double.toString(v1));

BigDecimal b2= newBigDecimal(Double.toString(v2));returnArithUtils.round(b1.multiply(b2).doubleValue(), scale);

}/*** 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。

*

*@paramv1

* 被除数

*@paramv2

* 除数

*@return两个参数的商*/

public static double div(double v1, doublev2) {returndiv(v1, v2, DEF_DIV_SCALE);

}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。

*

*@paramv1

* 被除数

*@paramv2

* 除数

*@paramscale

* 表示表示需要精确到小数点以后几位。

*@return两个参数的商*/

public static double div(double v1, double v2, intscale) {if (scale < 0) {throw new IllegalArgumentException("参数scale必须为整数为零!");

}

BigDecimal b1= newBigDecimal(Double.toString(v1));

BigDecimal b2= newBigDecimal(Double.toString(v2));returnb1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}/*** 提供精确的小数位四舍五入处理。

*

*@paramv

* 需要四舍五入的数字

*@paramscale

* 小数点后保留几位

*@return四舍五入后的结果*/

public static double round(double v, intscale) {if (scale < 0) {throw new IllegalArgumentException("参数scale必须为整数或零!");

}

BigDecimal b= newBigDecimal(Double.toString(v));

BigDecimal one= new BigDecimal("1");returnb.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}/*** 提供精确的类型转换(Float)

*

*@paramv

* 需要被转换的数字

*@return返回转换结果*/

public static float convertsToFloat(doublev) {

BigDecimal b= newBigDecimal(v);returnb.floatValue();

}/*** 提供精确的类型转换(Int)不进行四舍五入

*

*@paramv

* 需要被转换的数字

*@return返回转换结果*/

public static int convertsToInt(doublev) {

BigDecimal b= newBigDecimal(v);returnb.intValue();

}/*** 提供精确的类型转换(Long)

*

*@paramv

* 需要被转换的数字

*@return返回转换结果*/

public static long convertsToLong(doublev) {

BigDecimal b= newBigDecimal(v);returnb.longValue();

}/*** 返回两个数中大的一个值

*

*@paramv1

* 需要被对比的第一个数

*@paramv2

* 需要被对比的第二个数

*@return返回两个数中大的一个值*/

public static double returnMax(double v1, doublev2) {

BigDecimal b1= newBigDecimal(v1);

BigDecimal b2= newBigDecimal(v2);returnb1.max(b2).doubleValue();

}/*** 返回两个数中小的一个值

*

*@paramv1

* 需要被对比的第一个数

*@paramv2

* 需要被对比的第二个数

*@return返回两个数中小的一个值*/

public static double returnMin(double v1, doublev2) {

BigDecimal b1= newBigDecimal(v1);

BigDecimal b2= newBigDecimal(v2);returnb1.min(b2).doubleValue();

}/*** 精确比较两个数字

*

*@paramv1

* 需要被对比的第一个数

*@paramv2

* 需要被对比的第二个数

*@return如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1*/

public static int compareTo(double v1, doublev2) {

BigDecimal b1= newBigDecimal(v1);

BigDecimal b2= newBigDecimal(v2);returnb1.compareTo(b2);

}/*** 获取数字小数位数

*

*@paramnumber

* 数字.

*

*@return小数位数*/

public static int getDecimals(doublenumber) {

DecimalFormat decimalFormat= new DecimalFormat("#.####");

String numberString=decimalFormat.format(number);if (numberString.indexOf(".") > 0) {return numberString.length() - String.valueOf(number).indexOf(".")- 1;

}else{return 0;

}

}/*** 获取数字小数位数

*

*@paramnumber

* 数字.

*

*@return小数位数*/

public static int getDecimals(floatnumber) {

DecimalFormat decimalFormat= new DecimalFormat("#.####");

String numberString=decimalFormat.format(number);if (numberString.indexOf(".") > 0) {return numberString.length() - String.valueOf(number).indexOf(".")- 1;

}else{return 0;

}

}/*** 对double数据进行取精度.

*

*@paramvalue

* double数据.

*@paramscale

* 精度位数(保留的小数位数).

*@paramroundingMode : BigDecimal.ROUND_FLOOR(舍去scale位数后所有)

* 精度取值方式.

*@return精度计算后的数据.*/

public static double round(double value, int scale, introundingMode) {

BigDecimal bd= newBigDecimal(value);

bd=bd.setScale(scale, roundingMode);double d =bd.doubleValue();

bd= null;returnd;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7 64 安装sp1补丁提示“客户端没有所需的特权”

右击以管理员身份运行&#xff0c;再就是在控制面板&#xff0c;用户账户和家庭安全&#xff0c;用户账户&#xff0c;更改用户账户控制设置&#xff0c;调到最低。 重新启动电脑即可运行。

C# 全角半角相互转换

/// <summary>/// 半角转全角(SBC case)/// 全角空格为12288&#xff0c;半角空格为32/// 其他字符半角(33-126)与全角(65281-65374)的对应关系是&#xff1a;均相差65248/// </summary>/// <param name"input">任意字符串</param>/// <r…

java进程和线程_Java™ 教程(进程和线程)

并发计算机用户想当然地认为他们的系统一次可以做不止一件事&#xff0c;他们设想他们可以继续在文字处理器中工作&#xff0c;而其他应用程序则下载文件、管理打印队列和流音频&#xff0c;即使是单个应用程序通常也希望一次完成多个任务。例如&#xff0c;流式音频应用程序必…

C++ 中关于optional 使用过程中遇到的问题

头文件&#xff1a;#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器&#xff0c;它实现了"未初始化"的概念&#xff1a;如果元素未初始化&#xff0c;那么容器就是空的&#xff0c;否则&#xff0c;容器内就是有…

java config 类_Spring ----JavaConfig类代替XML配置Bean

1.使用JavaConfig实现Bean对象创建&#xff1a;通过Spring ApplicationContext的另一个容器AnnotationConfigurationApplicationContext的实现类ApplicationContext ac  new AnnotationConfigurationApplicationContext(“包名|配置类|bean工厂&#xff1f;”) 依赖工厂&a…

SQLServer 生成当前日期备份

DECLARE DataBase NVARCHAR(64)DECLARE strDate NVARCHAR(64)DECLARE strPath NVARCHAR(512)--备份采集配置数据库use TestDBSET DataBaseTestDBset strPathE:\数据库备份\set strDate convert(NVARCHAR(19),getdate(),120)set strDate REPLACE(strDate, : , )set strDate R…

白话经典算法系列之一 冒泡排序的三种实现

http://blog.csdn.net/morewindows/article/details/6657829 冒泡排序是非常容易理解和实现&#xff0c;&#xff0c;以从小到大排序举例&#xff1a; 设数组长度为N。 1&#xff0e;比较相邻的前后二个数据&#xff0c;如果前面数据大于后面的数据&#xff0c;就将二个数据交…

java 读取csv_Java读取CSV的常用方法 | 学步园

在项目开发中&#xff0c;我们经常需要读取csv的内容的操作。读取的逻辑并不复杂。主要是对有换行的&#xff0c;逗号&#xff0c;引号的处理恰当的话就没问题了。下面作为memo&#xff0c;把在项目中的读取方法拷贝了过来。有了下面的这些方法&#xff0c;在CSV的读取和输出的…

判断两颗树是否相同

tag: 二叉树 package com.zhaochao.tree;import java.util.Stack;/*** Created by zhaochao on 17/1/24.* 两颗树相等&#xff0c;意味着 对应节点的值相等&#xff0c;且具备相同的左右子树*/ public class JudgeSameTree {//recursion public boolean isSame(TreeNode rootA,…

C# XML格式化显示

/// <summary>/// XML格式化为文本显示/// </summary>/// <param name"str"></param>/// <returns></returns>public static string ShowXml(string str){MemoryStream mstream new MemoryStream();XmlTextWriter writer new …

C# CKEditor、CKFinder集成使用

1.裁剪&#xff08;ckeditor在\_Samples\ckeditor中&#xff09;2.添加引用&#xff1a;CKEditor.NET.dll、CKFinder.dll3.配置CKEditor&#xff1a;ckeditor/config.jsCKEDITOR.editorConfig function (config) {config.skin office2003;};4.使用CKEditor&#xff1a;<% …

tcp/ip四层和osi七层

转载于:https://www.cnblogs.com/mountian-lion/p/6353819.html

java的进程和线程_java进程和线程区别与不同

java进程和线程区别与不同。一、定义1.进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的一个独立单位。2.线程是进程的一个实体&#xff0c;是CPU调度和分派的基本单位&#xff0c;他是比进程更小的能独立运行的基本单位&…

【网络流24题----09】方格取数问题

问题描述&#xff1a;在一个有m*n 个方格的棋盘中&#xff0c;每个方格中有一个正整数。现要从方格中取数&#xff0c;使任意2 个数所在方格没有公共边&#xff0c;且取出的数的总和最大。试设计一个满足要求的取数算法。编程任务&#xff1a;对于给定的方格棋盘&#xff0c;按…