`

Double算数运算

UP 
阅读更多
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

public class Arith {
	 private static final int DEF_DIV_SCALE = 10;
	    
	    /**
	     * 两个Double数相加
	     * @param v1
	     * @param v2
	     * @return Double
	     */
	    public static Double add(Double v1,Double v2){
	        BigDecimal b1 = new BigDecimal(v1.toString());
	        BigDecimal b2 = new BigDecimal(v2.toString());
	        return b1.add(b2).doubleValue();
	    }
	    
	    
	    
	    /**
	     * 两个Double数相减
	     * @param v1
	     * @param v2
	     * @return Double
	     */
	    public static Double sub(Double v1,Double v2){
	        BigDecimal b1 = new BigDecimal(v1.toString());
	        BigDecimal b2 = new BigDecimal(v2.toString());
	        return b1.subtract(b2).doubleValue();
	    }
	    
	    /**
	     * 两个Double数相乘
	     * @param v1
	     * @param v2
	     * @return Double
	     */
	    public static Double mul(Double v1,Double v2){
	        BigDecimal b1 = new BigDecimal(v1.toString());
	        BigDecimal b2 = new BigDecimal(v2.toString());
	        return b1.multiply(b2).doubleValue();
	    }
	    
	    
	    /**
	     * 两个Double数相除
	     * @param v1
	     * @param v2
	     * @return Double
	     */
	    public static Double div(Double v1,Double v2){
	        BigDecimal b1 = new BigDecimal(v1.toString());
	        BigDecimal b2 = new BigDecimal(v2.toString());
	        return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();
	    }
	    
	    /**
	     * 两个Double数相除,并保留scale位小数
	     * @param v1
	     * @param v2
	     * @param scale
	     * @return Double
	     */
	    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(v1.toString());
	        BigDecimal b2 = new BigDecimal(v2.toString());
	        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
	    }
	    
	    /**
	     * 兩個數相減,如果有小數就向上進值.
	     * @param v1
	     * @param v2
	     * @return
	     */
	    public static Double subtract(Double v1,Double v2){
	    	BigDecimal b1 = new BigDecimal(v1.toString());
	        BigDecimal b2 = new BigDecimal(v2.toString());
	        return b1.subtract(b2,new MathContext(1,RoundingMode.CEILING)).doubleValue();
	    }

	    /**
	     * 對數值進行取值的優化.
	     * @param v1 
	     * @param scale 取小數點后位數。
	     * @return
	     */
	    public static Double getSacleDouble(Double v1,int scale){
	    	BigDecimal b1 = new BigDecimal(v1.toString());
	    	return b1.setScale(scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
	    }
	    
	   public static void main(String args[]){
		   System.out.println(sub(1000d,2000d));
	   }
	} 

 

分享到:
评论

相关推荐

    定义类模板实现2个数的算术运算

    本题目要求定义类模板实现2个数的最大值、最小值、加、减、乘、除等算术运算,在main()函数中使用该类模板分别实例化为int型和double型的类,定义相关的对象,读入2个整数和2个浮点数,然后分别输出它们的最大值、...

    堆栈计算算术表达式

    大部分的堆栈类实现表达式计算的例程都只能实现个位数的运算。在本例程中,创建了一个成员变量可为double型数字或是char型运算符的类,再建立该类的堆栈,最终可实现多位数的运算。

    double.js:javascript中的double-double运算。 具有31个精确十进制数字的浮点扩展

    double.js 具有31个准确的十进制数字(106位)的浮点展开,也称为双精度双精度算术或模拟float128。 该库对于扩展精度的快速计算很有用。 例如,在轨道力学,计算几何和数值不稳定算法中,例如执行三角剖分,多边形...

    Cast-Free-Arithmetic-in-Swift:Swift 2.0中的无强制转换算术运算!

    Swift中的无强制转换算法需要:Swift 2.0+ 使用Swift中的无强制转换算术,您不再需要强制转换以对不匹配的数字类型进行算术运算。 ###单字母转换将单字母属性转换为Float,CGFloat,Double,Int let num:Double = 12...

    BigDecimal 加减乘除运算

    BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...

    c语言的自动类型转换

    (1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算。 (2)若运算数中最长的类型为long型.则其他类型数均转换成long型数。 (3)若运算数中最长类型为int型,则char型也转换成int型进行运算...

    Java Number & Math 类.pdf

    它提供了一组用于操作数值类型的方法,如转换、比较、算术运算等。 二、Java Number类提供了哪些基本的数字操作? Java Number类提供了以下基本的数字操作:转换,比较,算术运算,取整,取余,取最大值和最小值,取...

    sy2_栈_

    运算符包括+、-、*、/、(、)、=,参加运算的数为double类型且为正数。(要求:直接针对中缀算术表达式进行计算,不能转换为后缀或前缀表达式再进行计算,只考虑二元运算即可。)输入多组数据,每组数据一行,对应一...

    数据结构 于红 第一次

    1. 编写一个函数 bool FindValue(int* A, int n, int x),实现在数组A中查找x...5. 编写一个函数 double compute(double a, double b, char opt),实现a与b的算术运算(运算类型由opt指定);并编写main进行调用测试。

    5.设计一个逻辑算术计算器,用来输入所需的数,并计算结果

    //判断是否是double型数参与运算,是为true,不是为false Object temp = event.getSource(); try { //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后 for (int i = 0; i ; i++) if ...

    hs-promote:Haskell 数字层次结构的 C++ 风格类型提升

    就像在 Haskell 中一样,C++ 的算术运算总是作用于相同的类型(例如: 2 + 2或2.0 + 2.0 ,但不是2 + 2.0 )。 与 Haskell 不同,C++ 自动将算术运算的参数提升为最通用的类​​型。 免得被认为C++在这方面优于...

    无符号数的词法分析程序

    double CJ2;//记数值 //函数声明 void check(char c);//检查首字母是否是数字的函数 void deal_integer(char c);//处理识别符的整数部分 void deal_point(char c);//用来处理小数部分 void deal_index(char c);...

    java课程设计-科学计算器.doc

    程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负 数运算)和sin、cos、tan等三角函数求值运算,同时能进行指数运算和自然对数运算, 还有求倒数、退格和清零功能。 3 设计思路 、本...

    BigDecimalUtils

    BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...

    VBScript ASP CDbl() 函数转换为双精度类型

    例如在出现货币或整数运算的情况下,使用 CDbl 或 CSng 函数强制进行双精度或单精度算术运算。 CDbl 函数用于进行从其他数据类型到 Double 子类型的国际公认的格式转换。例如,十进制分隔符和千位分隔符的识别取决于...

    labview IEEE-754单精度数值至字符转换

    IEEE二进制浮点数算术标准(IEEE 754)是1980年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷...

    IEEE-754双精度数值至字符转换

    IEEE二进制浮点数算术标准(IEEE 754)是1980年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷...

    decimal4j:Java库,用于基于long的快速定点算术,最多支持18个小数位

    直接与其他数据类型(long,double,...)进行互操作的便捷方法 支持所有舍入模式(默认值:HALF_UP) 效率 快速高效的实施(请参阅) 链式操作的实现 用于DecimalArithmetic API(具有未缩放的long值) 快速开始 ...

    antlr_llvm_compiler

    支持基本算术运算(+ - * /); 根据您自己的编程语言的可接受语法,使用 ANTLR 工具生成词法分析器(用于词法分析)和解析器(用于句法分析)。 然后根据 LLVM 规范创建一个包含实际源代码的中间表示(llvm ...

    单片机浮点库

    MUS-51单片机子程序,支持基本运算的辅助程序: 包括双精度加法、减法、尾数逻辑/算术移位、交换数据、 ;积商符号处理、尾数增1处理以及浮点数格式化等。它们也对函数计算提供支持等。

Global site tag (gtag.js) - Google Analytics