数字计算
2017-07-31 15:30
162 查看
package com.gq.core.utils;
import java.math.BigDecimal;
public class Arith {
// 源文件Arith.java:
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
*/
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
// 这个类不能实例化
private Arith() {
}
/**
* 提供精确的加法运算。
*
* @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 sub(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 mul(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 div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
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(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double remainder(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.remainder(b2).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();
}
public static double get10DownScale(double number1, double number2) {
BigDecimal a = new BigDecimal(Double.toString(number1));
BigDecimal b = new BigDecimal(Double.toString(number2));
return a.divide(b, 10, BigDecimal.ROUND_DOWN).doubleValue();
}
public static double get32DownScale(double number1, double number2) {
BigDecimal a = new BigDecimal(Double.toString(number1));
BigDecimal b = new BigDecimal(Double.toString(number2));
return a.divide(b, 32, BigDecimal.ROUND_DOWN).doubleValue();
}
public static double round2Up(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round2Down(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_DOWN).doubleValue();
}
public static BigDecimal round2UpReturnBigDecimal(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_HALF_UP);
}
public static BigDecimal round2DownReturnBigDecimal(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_DOWN);
}
public static BigDecimal returnBigDecimal(double v) {
return new BigDecimal(Double.toString(v));
}
};
import java.math.BigDecimal;
public class Arith {
// 源文件Arith.java:
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
*/
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
// 这个类不能实例化
private Arith() {
}
/**
* 提供精确的加法运算。
*
* @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 sub(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 mul(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 div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
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(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double remainder(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.remainder(b2).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();
}
public static double get10DownScale(double number1, double number2) {
BigDecimal a = new BigDecimal(Double.toString(number1));
BigDecimal b = new BigDecimal(Double.toString(number2));
return a.divide(b, 10, BigDecimal.ROUND_DOWN).doubleValue();
}
public static double get32DownScale(double number1, double number2) {
BigDecimal a = new BigDecimal(Double.toString(number1));
BigDecimal b = new BigDecimal(Double.toString(number2));
return a.divide(b, 32, BigDecimal.ROUND_DOWN).doubleValue();
}
public static double round2Up(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round2Down(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_DOWN).doubleValue();
}
public static BigDecimal round2UpReturnBigDecimal(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_HALF_UP);
}
public static BigDecimal round2DownReturnBigDecimal(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_DOWN);
}
public static BigDecimal returnBigDecimal(double v) {
return new BigDecimal(Double.toString(v));
}
};
相关文章推荐
- java的数字精确计算问题-BigDecimal
- 第四章 shell 数字计算【整数、浮点数】
- 用户输入一个数字n,计算1+2+3+4+……n的和。
- n个数字连乘的计算(Variable-Length Argument List)
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 使用跳转语句计算满足1+2+...+n<8888的最大整数n以及1—200之间被7整除的数字之和
- 计算1至n中数字X出现的次数
- 安卓根据身高计算标准体重,限制输入非数字的代码
- 数字电路设计之低功耗设计方法四:预计算
- 算法题目---计算数字连续和
- 计算1到N之间的数字中,1的个数
- 求Sn=a+aa+aaa+aaaa+aaaaa的前n项之和,其中a是一个数字,例如:例如:n=5,a=2时:计算:2+22+222+2222+22222
- 使用c语言编写程序,从键盘上任意输入两个数字,并计算出两个数的最小公倍数
- 计算输入数字的个数
- 每天一道LeetCode-----将数字集转成字母集,计算有多少种转换方式
- c编程:输入一个数字n,则n代表n行,每行输入2个数字a,b计算每行的a+b问题。
- 计算数字出现的次数
- 输入一行字符,计算其包含的大小写字母、数字、空格及其它字符各为多少
- 不使用乘号 除号 计算两个数字的乘 和 除