BigDecimal 加法减法乘法除法

Java的简单类型不能够精确的对浮点数进行运算

/**

* 提供精确的加法运算。

* @param v1 被加数

* @param v2 加数

* @return 两个参数的和

*/

public static double add(double v1, double v2)

{

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

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.add(b2).doubleValue();

}

/**

* 提供精确的减法运算。

*

* @param v1 被减数

* @param v2 减数

* @return 两个参数的差

*/

public static double subtract(double v1, double v2)

{

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

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.subtract(b2).doubleValue();

}

/**

* 提供精确的乘法运算。

*

* @param v1 被乘数

* @param v2 乘数

* @return 两个参数的积

*/

public static double multiply(double v1, double v2)

{

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

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.multiply(b2).doubleValue();

}

/**

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

*

* @param v1 被除数

* @param v2 除数

* @return 两个参数的商

*/

public static double divide(double v1, double v2)

{

return divide(v1, v2, DEF_DIV_SCALE);

}

/**

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

*

* @param v1 被除数

* @param v2 除数

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

* @return 两个参数的商

*/

public static double divide(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(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}

/**

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

*

* @param v 需要四舍五入的数字

* @param scale 小数点后保留几位

* @return 四舍五入后的结果

*/

public static double round(double v, int scale)

{

if (scale < 0)

{

throw new IllegalArgumentException("The scale must be a positive integer or zero");

}

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

BigDecimal one = new BigDecimal("1");

return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}

BigDecimal 加法减法乘法除法

时间: 2024-10-13 00:57:23

BigDecimal 加法减法乘法除法的相关文章

加法 减法 乘法 除法计算

加法: function numAdd(num1, num2) {  var baseNum, baseNum1, baseNum2;  try {   baseNum1 = num1.toString().split(".")[1].length;  } catch (e) {   baseNum1 = 0;  }  try {   baseNum2 = num2.toString().split(".")[1].length;  } catch (e) {   

高精度 加法 减法 乘法 除法 整合

此文为博主原创,转载时请通知博主,并把原文链接放在正文醒目位置. 很久不写高精了,虽说我觉得高精也不会考...还是稍微写一写,防止手生. 两个小时过去了…… 集合了高精+高精.高精-高精.高精*高精.高精/低精. 目前还没发现什么错误,应该可以应付各种情况. 本来想允许它读入负数的,结果发现减法读负数太麻烦了...所以只能读非负数. 下面贴代码. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #

[CareerCup] 7.4 Implement Multiply Subtract and Divide 实现乘法减法和除法

7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only the add operator. 这道题让我们实现乘法加法和除法,而且规定了只能使用加法.那么我们先来看如何用加法来实现减法,我们知道,减去一个数就等于加上这个数的负数.那么我们先写一个求负数的函数,对于n来说,我们累计n个-1,对于-n来说,我们累计n个1.这样减法的就搞定了,我们再来看乘法,乘

一个基础而奇怪的问题:算法执行加法、乘法、除法性能无区别?

一个基础而奇怪的问题:算法执行加法.乘法.除法性能无区别? 计算机原理分析觉得:加法.乘法和除法的计算性能依次减少,但减少到什么程度? 编写C程序用30次百万数据计算来測试时间差异性,代码例如以下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 void add(float x[], long n) { float sum = 0; for(long i = 0; i

一个基础而奇怪的问题:算法运行加法、乘法、除法性能无差别?

一个基础而奇怪的问题:算法运行加法.乘法.除法性能无差别? 计算机原理分析认为:加法.乘法和除法的计算性能依次降低,但降低到什么程度? 编写C程序用30次百万数据计算来测试时间差异性,代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 void add(float x[], long n) { float sum = 0; for(long i = 0; i &

9.7数学与概率(二)——实现整数的乘法、减法和除法运算,只允许使用加号

/** * 功能:实现整数的乘法.减法和除法运算.只允许使用加号. */ //减法 public static int minus(int a,int b){ return a+negate(b); } //取反 /** * 思路:对正数k的取反,只需要将-1连续加k次:对负数k的取反,只需要将1连续加k次. * @param a * @return */ public static int negate(int a){ int neg=0; int d=a>0?-1:1; while(a!=0

[DataStructure]多项式加法与乘法--B.链表存储(适用于零元系数多的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 基本思想:加法和乘法都是把得数项直接链接在链表后面,最后统一做一个Merge&Sort工作即可.方便又快捷. (1)建立存储结构 1 struct _Poly 2 { 3 int factor;//系数 4 int Index;//幂 5 struct _Poly* next;//下一节点 6 }; 7 _Poly* poly[MAXTIMES+1]; 8 int Sum[MAXTIMES+1

[DataStructure]多项式加法与乘法--A.数组存储(适用于零元系数少的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 (1)建立存储结构 1 struct _Poly 2 { 3 double Data[MAXTIMES+1]; 4 int Times; 5 }; 6 struct _Poly Poly[N+1]; (2)主程序架构 1 int main() 2 { 3 int Sum; 4 cout<<"请输入要做运算的多项式数量"<<endl; 5 cin>>

数据结构第二次上机实验【链表实现多项式的加法和乘法】

利用链表实现一元多项式的加法和乘法 #define null 0 #include "stdio.h" #include "stdlib.h" #include "math.h" int op; typedef struct { float coef;//系数 int expn;//指数 }term; typedef struct Lnode { term data; Lnode *next; }*Link,*Linklist; int cmp(