BigDecimal实现精确加减乘除运算

BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:

第一种:BigDecimal(double val)
Translates a double into a BigDecimal.

第二种:BigDecimal(String val)
Translates the String repre sentation of a BigDecimal into a BigDecimal.

使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。

 1 import java.math.BigDecimal;
 2 /**
 3 * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
 4 * 确的浮点数运算,包括加减乘除和四舍五入。
 5 */
 6 public class Arith{ //默认除法运算精度
 7 private static final int DEF_DIV_SCALE = 10; //这个类不能实例化
 8 private Arith(){
 9 }
10 /**
11 * 提供精确的加法运算。
12 * @param v1 被加数
13 * @param v2 加数
14 * @return 两个参数的和
15 */
16 public static double add(double v1,double v2){
17 BigDecimal b1 = new BigDecimal(Double.toString(v1));
18 BigDecimal b2 = new BigDecimal(Double.toString(v2));
19 return b1.add(b2).doubleValue();
20 }
21 /**
22 * 提供精确的减法运算。
23 * @param v1 被减数
24 * @param v2 减数
25 * @return 两个参数的差
26 */
27 public static double sub(double v1,double v2){
28 BigDecimal b1 = new BigDecimal(Double.toString(v1));
29 BigDecimal b2 = new BigDecimal(Double.toString(v2));
30 return b1.subtract(b2).doubleValue();
31 }
32 /**
33 * 提供精确的乘法运算。
34 * @param v1 被乘数
35 * @param v2 乘数
36 * @return 两个参数的积
37 */
38 public static double mul(double v1,double v2){
39 BigDecimal b1 = new BigDecimal(Double.toString(v1));
40 BigDecimal b2 = new BigDecimal(Double.toString(v2));
41 return b1.multiply(b2).doubleValue();
42 }
43 /**
44 * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
45 * 小数点以后10位,以后的数字四舍五入。
46 * @param v1 被除数
47 * @param v2 除数
48 * @return 两个参数的商
49 */
50 public static double div(double v1,double v2){
51 return div(v1,v2,DEF_DIV_SCALE);
52 }
53 /**
54 * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
55 * 定精度,以后的数字四舍五入。
56 * @param v1 被除数
57 * @param v2 除数
58 * @param scale 表示表示需要精确到小数点以后几位。
59 * @return 两个参数的商
60 */
61 public static double div(double v1,double v2,int scale){
62 if(scale<0){
63 throw new IllegalArgumentException(
64 "The scale must be a positive integer or zero");
65 }
66 BigDecimal b1 = new BigDecimal(Double.toString(v1));
67 BigDecimal b2 = new BigDecimal(Double.toString(v2));
68 return b2.divide(b1,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
69 }
70 /**
71 * 提供精确的小数位四舍五入处理。
72 * @param v 需要四舍五入的数字
73 * @param scale 小数点后保留几位
74 * @return 四舍五入后的结果
75 */
76 public static double round(double v,int scale){
77 if(scale<0){
78 throw new IllegalArgumentException("The scale must be a positive integer or zero");
79 }
80 BigDecimal b = new BigDecimal(Double.toString(v));
81 BigDecimal one = new BigDecimal("1");
82 return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
83 }
84 };    

原文地址:https://www.cnblogs.com/czicy/p/9082478.html

时间: 2024-11-05 20:43:48

BigDecimal实现精确加减乘除运算的相关文章

精确的double加减乘除运算工具类

import java.math.BigDecimal; /** * 精确的double加减乘除运算 * @author cyf * */ public class DoubleUtil { /** * 提供精确的加法运算. * * @param v1 * 被加数 * @param v2 * 加数 * @return 两个参数的和 */ public static double add(double v1, double v2) { BigDecimal b1 = new BigDecimal(

使用BigDecimal进行精确运算

使用BigDecimal进行精确运算 首先我们先来看如下代码示例: 1 public class Test_1 { 2 public static void main(String[] args) { 3 System.out.println(0.06+0.01); 4 System.out.println(1.0-0.42); 5 System.out.println(4.015*100); 6 System.out.println(303.1/1000); 7 } 8 9 } 运行结果如下.

BigDecimal类的加减乘除

BigDecimal类的加减乘除 转自:http://blog.sina.com.cn/s/blog_6a0cd5e501011soa.html BigDecimal类型(+ - * /)所用的属性 11.10 BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作.BigDecimal类的常用方法如表11-15所示. 表11-15 BigDec

java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)

一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start=System.currectTimeMillis() ,long stop=System.currectTimeMillis() , stop-start; 二  有关大数据的运算及精确数字运算. 此时integer不适用.我们使用BigInteger ,如:BigInteger B= new Bi

BigDecimal进行除法divide运算注意事项

Java编程中 BigDecimal进行除法divide运算时,如果结果不整除,出现无限循环小数.则会抛出以下异常: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333.... 解决之道:就是给divide设置精确的小数点divide(

简单工厂模式--加减乘除运算

学习来自<大话设计模式> 下面基于简单的<加减乘除运算>实例来讲讲实用简单工厂模式:<备注:以后根据认识的加深,可以添加和修改内容> 需求分析:希望程序提供“加减乘除”四种功能. 功能分析:四种功能都是并列的,相互独立的. 拓展分析:很有可能拓展新的功能,比如“开根运算”. 如何设计: 1.根据“功能分析”可以将四种功能都归并一个父类出来,然后创建四个子类继承它,并且提供空的方法(OC中模拟抽象方法或者虚函数),这四个子类分别都要继承并重写实现这个空方法.这样,一个抽象

利用JavaScript实现加减乘除运算

一.问题:利用JavaScript写一个加减乘除运算,输入两个数,判断下拉列框的运算符号,进行相应的运算 二.首先,我利用JavaScript实现简单加法运算,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="

&quot;Coding Interview Guide&quot; -- 只用位运算不用算术运算实现整数的加减乘除运算

[题目] 给定两个32位整数a和b,可正.可负.可0,不能使用算术运算符,分别实现a和b的加减乘除运算 [要求] 如果给定的a和b执行加减乘除的某些结果本来就会导致数据的溢出,那么你实现的函数不必对那些结果负责 加法运算:a + b = (a ^ b) + ((a & b) << 1) 1 public int add(int a, int b) 2 { 3 int sum = a; 4 while(b != 0) 5 { 6 sum = a ^ b; // 不带进位的加法 7 b =

BigDecimal加减乘除运算

java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val)Translates a double into a BigDecimal. 第二种:BigDecimal(String val)Translates the String repre sentation of a BigDecimal into a BigDecimal. 使用BigDecimal要用String来够造,要做一个加法