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个数的最大值、最小值、加、减、乘、除等算术运算,在main()函数中使用该类模板分别实例化为int型和double型的类,定义相关的对象,读入2个整数和2个浮点数,然后分别输出它们的最大值、...
大部分的堆栈类实现表达式计算的例程都只能实现个位数的运算。在本例程中,创建了一个成员变量可为double型数字或是char型运算符的类,再建立该类的堆栈,最终可实现多位数的运算。
double.js 具有31个准确的十进制数字(106位)的浮点展开,也称为双精度双精度算术或模拟float128。 该库对于扩展精度的快速计算很有用。 例如,在轨道力学,计算几何和数值不稳定算法中,例如执行三角剖分,多边形...
Swift中的无强制转换算法需要:Swift 2.0+ 使用Swift中的无强制转换算术,您不再需要强制转换以对不匹配的数字类型进行算术运算。 ###单字母转换将单字母属性转换为Float,CGFloat,Double,Int let num:Double = 12...
BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...
(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算。 (2)若运算数中最长的类型为long型.则其他类型数均转换成long型数。 (3)若运算数中最长类型为int型,则char型也转换成int型进行运算...
它提供了一组用于操作数值类型的方法,如转换、比较、算术运算等。 二、Java Number类提供了哪些基本的数字操作? Java Number类提供了以下基本的数字操作:转换,比较,算术运算,取整,取余,取最大值和最小值,取...
运算符包括+、-、*、/、(、)、=,参加运算的数为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进行调用测试。
//判断是否是double型数参与运算,是为true,不是为false Object temp = event.getSource(); try { //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后 for (int i = 0; i ; i++) if ...
就像在 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);...
程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负 数运算)和sin、cos、tan等三角函数求值运算,同时能进行指数运算和自然对数运算, 还有求倒数、退格和清零功能。 3 设计思路 、本...
BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...
例如在出现货币或整数运算的情况下,使用 CDbl 或 CSng 函数强制进行双精度或单精度算术运算。 CDbl 函数用于进行从其他数据类型到 Double 子类型的国际公认的格式转换。例如,十进制分隔符和千位分隔符的识别取决于...
IEEE二进制浮点数算术标准(IEEE 754)是1980年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷...
IEEE二进制浮点数算术标准(IEEE 754)是1980年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷...
直接与其他数据类型(long,double,...)进行互操作的便捷方法 支持所有舍入模式(默认值:HALF_UP) 效率 快速高效的实施(请参阅) 链式操作的实现 用于DecimalArithmetic API(具有未缩放的long值) 快速开始 ...
支持基本算术运算(+ - * /); 根据您自己的编程语言的可接受语法,使用 ANTLR 工具生成词法分析器(用于词法分析)和解析器(用于句法分析)。 然后根据 LLVM 规范创建一个包含实际源代码的中间表示(llvm ...
MUS-51单片机子程序,支持基本运算的辅助程序: 包括双精度加法、减法、尾数逻辑/算术移位、交换数据、 ;积商符号处理、尾数增1处理以及浮点数格式化等。它们也对函数计算提供支持等。