package com.tht.common.arithmetic.math;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* Created by IntelliJ IDEA.
* User: T.H.T
* Date: 2010-11-2
* Time: 17:18:13
* To change this template use File | Settings | File Templates.
* 由于Java中的double,float不能精确的进行运算,所以用些工具类来代替常用的 加,减,乘,除
*/
public class ThtBigDecimal {
/**
* 默认的除法精度为两位
*/
public static final int DEF_DIV_SCALE=2;
/**
* 精确的加法运算
* @param d1 第一个加数
* @param d2 第二个加数
* @return double 型结果
*/
public static BigDecimal add(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.add(b2);
}
/**
* 精确的加法运算
* @param d1 第一个加数
* @param d2 第二个加数
* @return double 型结果
*/
public static BigDecimal add(int d1,int d2){
BigDecimal b1=new BigDecimal(Integer.toString(d1));
BigDecimal b2=new BigDecimal(Integer.toString(d2));
return b1.add(b2);
}
/**
* 精确的加法运算
* @param d1 第一个加数
* @param d2 第二个加数
* @return double 型结果
*/
public static BigDecimal add(String d1,String d2){
BigDecimal b1=new BigDecimal(d1);
BigDecimal b2=new BigDecimal(d2);
return b1.add(b2);
}
/**
* 精确的减法运算
* @param d1 被减数
* @param d2 减数
* @return double 型结果
*/
public static BigDecimal sub(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.subtract(b2);
}
/**
* 精确的减法运算
* @param d1 被减数
* @param d2 减数
* @return double 型结果
*/
public static BigDecimal sub(int d1,int d2){
BigDecimal b1=new BigDecimal(Integer.toString(d1));
BigDecimal b2=new BigDecimal(Integer.toString(d2));
return b1.subtract(b2);
}
/**
* 精确的减法运算
* @param d1 被减数
* @param d2 减数
* @return double 型结果
*/
public static BigDecimal sub(String d1,String d2){
BigDecimal b1=new BigDecimal(d1);
BigDecimal b2=new BigDecimal(d2);
return b1.subtract(b2);
}
/**
* 精确的乘法运算
* @param d1 因数一
* @param d2 因数二
* @return double 型结果
*/
public static BigDecimal mul(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.multiply(b2);
}
/**
* 精确的乘法运算
* @param d1 因数一
* @param d2 因数二
* @return double 型结果
*/
public static BigDecimal mul(int d1,int d2){
BigDecimal b1=new BigDecimal(Integer.toString(d1));
BigDecimal b2=new BigDecimal(Integer.toString(d2));
return b1.multiply(b2);
}
/**
* 精确的乘法运算
* @param d1 因数一
* @param d2 因数二
* @return double 型结果
*/
public static BigDecimal mul(String d1,String d2){
BigDecimal b1=new BigDecimal(d1);
BigDecimal b2=new BigDecimal(d2);
return b1.multiply(b2);
}
/**
* 精确的除法运算,默认保留两位小数,指定小数精确4位数如:div(65.22,2.13,4); div(double d1,double d2,int scale)
* @param d1 被除数
* @param d2 除数
* @return double 型结果
*/
public static BigDecimal div(double d1,double d2){
return div( d1, d2,DEF_DIV_SCALE);
}
/**
* 精确的除法运算,默认保留两位小数,指定小数精确4位数如:div(65.22,2.13,4); div(double d1,double d2,int scale)
* @param d1 被除数
* @param d2 除数
* @return double 型结果
*/
public static BigDecimal div(int d1,int d2){
return div( d1, d2,DEF_DIV_SCALE);
}
/**
* 精确的除法运算,默认保留两位小数,指定小数精确4位数如:div(65.22,2.13,4); div(double d1,double d2,int scale)
* @param d1 被除数
* @param d2 除数
* @return double 型结果
*/
public static BigDecimal div(String d1,String d2){
return div( d1, d2,DEF_DIV_SCALE);
}
/**
* 精确的除法运算
* @param d1 被除数
* @param d2 除数
* @param scale 小数点精确的位数
* @return double 型结果
*/
public static BigDecimal div(double d1,double d2,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be positive integer or zero");
}
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP);
}
/**
* 精确的除法运算
* @param d1 被除数
* @param d2 除数
* @param scale 小数点精确的位数
* @return double 型结果
*/
public static BigDecimal div(int d1,int d2,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be positive integer or zero");
}
BigDecimal b1=new BigDecimal(Integer.toString(d1));
BigDecimal b2=new BigDecimal(Integer.toString(d2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP);
}
/**
* 精确的除法运算
* @param d1 被除数
* @param d2 除数
* @param scale 小数点精确的位数
* @return double 型结果
*/
public static BigDecimal div(String d1,String d2,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be positive integer or zero");
}
BigDecimal b1=new BigDecimal(d1);
BigDecimal b2=new BigDecimal(d2);
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP);
}
/**
* 精确的四舍五入
* @param d 需要精确的数据
* @param scale 精确的精度
* @return double 型结果
*/
public static BigDecimal round(double d,int scale){
BigDecimal b1=new BigDecimal(Double.toString(d));
BigDecimal one=new BigDecimal("1");
return b1.divide(one,scale,BigDecimal.ROUND_HALF_UP);
}
/**
* 精确的四舍五入
* @param d 需要精确的数据
* @param scale 精确的精度
* @return double 型结果
*/
public static BigDecimal round(int d,int scale){
BigDecimal b1=new BigDecimal(Integer.toString(d));
BigDecimal one=new BigDecimal("1");
return b1.divide(one,scale,BigDecimal.ROUND_HALF_UP);
}
/**
* 精确的四舍五入
* @param d 需要精确的数据
* @param scale 精确的精度
* @return double 型结果
*/
public static BigDecimal round(String d,int scale){
BigDecimal b1=new BigDecimal(d);
BigDecimal one=new BigDecimal("1");
return b1.divide(one,scale,BigDecimal.ROUND_HALF_UP);
}
/**
* 精确的四舍五入,默认为了位小数
* @param d 需要精确的数据
* @return double 型结果
*/
public static BigDecimal round(double d){
return round(d,2);
}
/**
* 精确的四舍五入,默认为了位小数
* @param d 需要精确的数据
* @return double 型结果
*/
public static BigDecimal round(int d){
return round(d,2);
}
/**
* 精确的四舍五入,默认为了位小数
* @param d 需要精确的数据
* @return double 型结果
*/
public static BigDecimal round(String d){
return round(d,2);
}
/**
* 格式化数字
* @param number 需要格式化的数字
* @param formatStr 字符串格式 如:0.00
* @return
*/
public static String format(long number,String formatStr){
DecimalFormat df = new DecimalFormat(formatStr);
return df.format(number);
}
/**
* 格式化数字,默认格式为0.00
* @param number
* @return
*/
public static String format(long number){
return format(number,"0.00");
}
/**
* 格式化数字,默认格式为0.00
* @param number
* @return
*/
public static String format(double number){
return format(number,"0.00");
}
/**
* 格式化数字
* @param number 需要格式化的数字
* @param formatStr 字符串格式 如:0.00
* @return
*/
public static String format(double number,String formatStr){
DecimalFormat df = new DecimalFormat(formatStr);
return df.format(number);
}
/**
* 格式化数字
* @param number 需要格式化的数字
* @param formatStr 字符串格式 如:0.00
* @return
*/
public static String format(Object number,String formatStr){
DecimalFormat df = new DecimalFormat(formatStr);
return df.format(Double.valueOf(String.valueOf(number)));
}
/**
* 格式化数字,默认格式为0.00
* @param number
* @return
*/
public static String format(Object number){
return format(Double.valueOf(String.valueOf(number)),"0.00");
}
}
转载自:http://thinktothings.iteye.com/blog/801301
分享到:
相关推荐
,用于计算两个字符串之间的归一化距离或相似度分数。 0.0 分表示两个字符串绝对不相似,1.0 表示绝对相似(或相等)。 介于两者之间的任何内容都表示两个...double score = service . score(source, target); // Sc
积分java源码java-data-types-string-apis-java-se-11 嗨,欢迎来到练习项目,使用 java 数据类型和字符串 API。 在这个项目中,我们将涵盖许多与原始类型和变量相关的主题,而大多数 Java 课程提供通用信息。 本...
数据转换,bytes - float - double 相互转换
北京动力节点-Java编程零基础教程-059-Java基本语法-数据类型-float与double的区别.avi 北京动力节点-Java编程零基础教程-060-Java基本语法-数据类型-布尔型.avi 北京动力节点-Java编程零基础教程-061-Java基本...
我们在修改后的最小减法方案中对三个回路计算了三个规范... 我们为类型I,II,X和Y的两个Higgs-doublet模型的常用Z2对称版本提供了明确的结果。此外,我们提供了三环Yukawa耦合beta函数的首次独立交叉检查。 标准模型。
GXLife-Linux---Double-imx-mkimage 打包工具怕找不到
string转换double string转换double string转换double string转换double
GXLife-Android--Double-imx-mkimage 打包工具怕找不到
Robomongo 是一个界面友好且免费的 MongoDB 可视化工具,读者可在 Robomongo 官网下载此软件,其安装过程十分简单,安装好的界面
离线安装包,亲测可用
Java实现IEE754 Float类型数据
Struts2-Double-Select-Example
离线安装包,测试可用
float -Float double -Double char-Character boolean-Boolean 1、所属的包 java.lang 2、类的继承关系、实现接口 前面6个包装类是与数字相关的 父类:Number Boolean、Character 父类:Object 8个...
$ npm install --save react-double-marquee 然后,将其导入并包装在不显示溢出的元素中: import Marquee from 'react-double-marquee' ; export default function FooComponent ( ) { return ( So
igemm-double-lds-one.cpp
* This class is converts a Double to a double-digit String * (and vise-versa) by BeanUtils when copying properties. * * @author <a href="mailto:matt@raibledesigns.com">Matt Raible */
前端开源库-doublearray双数组trie的Doublearray、javascript实现
前端开源库-coffeelint-prefer-double-quotescofeelint更喜欢双引号,自定义cofeelint规则更喜欢双引号