版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA处理高精度计算Double.valueOf(String and Float.valueOf(String都会丢失精度。为了解决这个问题,需要用到BigDecimal类。使用的BigDecimal类的时候需要注意的地方:1. 在实例化BigDecimal 的时候用 new BigDecimal(String 代替new BigDecimal(double ,new BigDecimal(float在Effective Java书中有提到2. 比较两个数的时候用compareTo 小于返回-1 , 等于返回0 , 大于返回1javaimport java.math
2、.BigDecimal; public class ArithmeticUtil /* * 小数精确的位数 */ private static final int DEF_DIV_SCALE = 10; /*
3、0; * 提供精确的加法运算。 * * param v1 * 被加数 * param v2 * &
4、#160; 加数 * return 两个参数的和 */ public static double add(double v1, double v2 BigDecimal b1 = new BigDecimal(Double.toString(v1;&
5、#160; BigDecimal b2 = new BigDecimal(Double.toString(v2; return b1.add(b2.doubleValue(; /*
6、; * 提供精确的加法运算。 * * param v1 * 被加数 * param v2 *
7、160; 加数 * return 两个参数的和 */ public static BigDecimal add(String v1, String v2 BigDecimal b1 = new BigDecimal(v1;
8、160; BigDecimal b2 = new BigDecimal(v2; return b1.add(b2; /* * 提供精确的加法运算。 String
9、60; * * param v1 * 被加数 * param v2 *
10、加数 * return 两个参数的和 */ public static String strAdd(String v1, String v2,int scale if (scale < 0
11、60; throw new IllegalArgumentException( "The scale must be a positive integer or zero"
12、; BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.add(b2.setScale(scale, BigDecimal.ROUND_HALF_UP.toString(;
13、0; /* * 提供精确的减法运算。 * * param v1 * 被减数
14、0; * param v2 * 减数 * return 两个参数的差 */ public static double sub(double v1, double v2
15、 BigDecimal b1 = new BigDecimal(Double.toString(v1; BigDecimal b2 = new BigDecimal(Double.toString(v2; return b1.subtract(b2.doubleValue(;
16、 /* * 提供精确的减法运算。 * * param v1 * 被减数
17、 * param v2 * 减数 * return 两个参数的差 */ public static BigDecimal sub(String v1, String v2
18、0; BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.subtract(b2;
19、 /* * 对一个数字取精度 * param v * param scale * return */ public static BigDecimal round(String v, int
20、scale if (scale < 0 throw new IllegalArgumentException(
21、 "The scale must be a positive integer or zero" BigDecimal b = new BigDecimal(v; BigDecimal one = new BigDeci
22、mal("1" return b.divide(one, scale, BigDecimal.ROUND_HALF_UP; /* * 提供精确的减法运算。String *
23、 * param v1 * 被减数 * param v2 * 减数
24、60; * return 两个参数的差 */ public static String strSub(String v1, String v2,int scale if (scale < 0 t
25、hrow new IllegalArgumentException( "The scale must be a positive integer or zero"
26、0; BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.subtract(b2.setScale(scale, BigDecimal.ROUND_HALF_UP.toString(;
27、0; /* * 提供精确的乘法运算。 * * param v1 * 被乘数 * param v
28、2 * 乘数 * return 两个参数的积 */ public static double mul(double v1, double v2
29、 BigDecimal b1 = new BigDecimal(Double.toString(v1; BigDecimal b2 = new BigDecimal(Double.toString(v2; return b1.multiply(b2.doubleValue(;
30、; /* * 提供精确的乘法运算。 * * param v1 * 被乘数 * par
31、am v2 * 乘数 * return 两个参数的积 */ public static BigDecimal mul(String v1, String v2
32、0; BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.multiply(b2;
33、 /* * 提供精确的乘法运算。 保留scale 位小数 * * param v1 * 被乘数 * param v2
34、160; * 乘数 * return 两个参数的积 */ public static double mul2(double v1, double v2,int scale
35、0; BigDecimal b1 = new BigDecimal(Double.toString(v1; BigDecimal b2 = new BigDecimal(Double.toString(v2; return round(b1.multiply(b2.doubleValue(,scale;
36、60; /* * 提供精确的乘法运算。 保留scale 位小数 String * * param v1 * 被乘数
37、60; * param v2 * 乘数 * return 两个参数的积 */ public static String strMul2(String v1, String v2,int sca
38、le if (scale < 0 throw new IllegalArgumentException(
39、60; "The scale must be a positive integer or zero" BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecima
40、l(v2; return b1.multiply(b2.setScale(scale, BigDecimal.ROUND_HALF_UP.toString(; /* * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
41、0; * * param v1 * 被除数 * param v2 * 除数
42、; * return 两个参数的商 */ public static BigDecimal div(String v1, String v2 return div(v1, v2, DEF_DIV_SCALE;
43、160; /* * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。 * * param v1 * 被除数 &
44、#160; * param v2 * 除数 * return 两个参数的商 */ public static double div(double v1, double v2
45、60; return div(v1, v2, DEF_DIV_SCALE; /* * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。 * * param v1
46、160; * 被除数 * param v2 * 除数 * param scale
47、160; * 表示需要精确到小数点以后几位。 * return 两个参数的商 */ public static double div(double v1, double v2, int scale
48、60; if (scale < 0 throw new IllegalArgumentException( "The scale must
49、 be a positive integer or zero" BigDecimal b1 = new BigDecimal(Double.toString(v1; BigDecimal b2 = new BigDecimal(Double.toString(v2
50、; return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP.doubleValue(; /* * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
51、160; * * param v1 * 被除数 * param v2 *
52、 除数 * param scale * 表示需要精确到小数点以后几位。 * return 两个参数的商 */ public static BigDecima
53、l div(String v1, String v2, int scale if (scale < 0 throw new IllegalArgumentException(
54、0; "The scale must be a positive integer or zero" BigDecimal b1 = new BigDecimal(v1; &
55、#160; BigDecimal b2 = new BigDecimal(v2; return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP; /* * 精确的除法运算。除不尽时,由scale参数指 定精度 四舍五入。string
56、; * * param v1 * 被除数 * param v2 *
57、60; 除数 * param scale * 表示需要精确到小数点以后几位。 * return 两个参数的商 */ public static String strDi
58、v(String v1, String v2, int scale if (scale < 0 throw new IllegalArgumentException(
59、160; "The scale must be a positive integer or zero" BigDecimal b1 = new BigDecimal(v1;
60、; BigDecimal b2 = new BigDecimal(v2; return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP.toString(; /* * 精确的除法运算。除不尽时,由scale参数指 定精
61、度 四舍五入。string * * param v1 * 被除数 * param v2 *
62、60; 除数 * param scale * 表示需要精确到小数点以后几位。 * return 两个参数的商 */ pu
63、blic static BigDecimal bigDiv(String v1, String v2, int scale if (scale < 0 throw new IllegalArgumentException(
64、0; "The scale must be a positive integer or zero" BigDecimal b1 = new BigDecimal(v1; &
65、#160; BigDecimal b2 = new BigDecimal(v2; return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP; /* * 取余数 string
66、60; * param v1 * param v2 * param scale * return */ public static BigDecimal strRemainder(String v1,String v2, int scale
67、 if (scale < 0 throw new IllegalArgumentException( "
68、;The scale must be a positive integer or zero" BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2;
69、0; return b1.remainder(b2.setScale(scale, BigDecimal.ROUND_HALF_UP; /* * 取余数 string * param v1 * param v2
70、160; * param scale * return string */ public static String strRemainder2Str(String v1,String v2, int scale if (scale < 0
71、160; throw new IllegalArgumentException( "The scale must be a positive integer or zero"
72、; BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.remaind
73、er(b2.setScale(scale, BigDecimal.ROUND_HALF_UP.toString(; /* * 比较大小 如果v1 大于v2 则 返回true 否则false * param v1 * param v2
74、60; * return */ public static boolean strcompareTo(String v1,String v2 BigDecimal b1 = new BigDecimal(v1; BigDecim
75、al b2 = new BigDecimal(v2; int bj = pareTo(b2; boolean res ; if(bj>0 &
76、#160; res = true; else res = false; return res;
77、 /* * 比较大小 如果v1 大于等于v2 则 返回true 否则false * param v1 * param v2 * return */ public static boolean
78、strcompareTo2(String v1,String v2 BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; int bj = pareTo(b2;
79、60; boolean res ; if(bj>=0 res = true; else
80、160; res = false; return res; /* * 比较大小 如果v1 等于v2 则 返回true 否则false
81、; * param v1 * param v2 * return */ public static boolean strcompareTo3(String v1,String v2 BigDecimal b1 = new BigDecim
82、al(v1; BigDecimal b2 = new BigDecimal(v2; int bj = pareTo(b2; boolean res ; if(bj=0&
83、#160; res = true; else res = false; return
84、 res; /* * 取余数 BigDecimal * param v1 * param v2 * param scale
85、0; * return */ public static BigDecimal bigRemainder(BigDecimal v1,BigDecimal v2, int scale if (scale < 0
86、; throw new IllegalArgumentException( "The scale must be a positive integer or zero" &
87、#160; return v1.remainder(v2.setScale(scale, BigDecimal.ROUND_HALF_UP; /* * 提供精确的小数位四舍五入处理。 *
88、160; * param v * 需要四舍五入的数字 * param scale * 小数点后保留几位
89、60; * return 四舍五入后的结果 */ public static double round(double v, int scale if (scale < 0 throw new Illegal
90、ArgumentException( "The scale must be a positive integer or zero"
91、160; BigDecimal b = new BigDecimal(Double.toString(v; BigDecimal one = new BigDecimal("1" return b.divide(one, scale, BigDecimal.ROUND_HALF_UP.doubleValue(;
92、160; /* * 提供精确的小数位四舍五入处理。string * * param v * 需要四舍五入的
93、数字 * param scale * 小数点后保留几位 * return 四舍五入后的结果 */ public static String strRound(Strin
94、g v, int scale if (scale < 0 throw new IllegalArgumentException(
95、60; "The scale must be a positive integer or zero" BigDecimal b = new BigDecimal(v; return b.setScale(s
96、cale, BigDecimal.ROUND_HALF_UP.toString(; import java.math.BigDecimal;public class ArithmeticUtil /* * 小数精确的位数 */ priva
97、te static final int DEF_DIV_SCALE = 10; /* * 提供精确的加法运算。 * * param v1 * 被加数 * param v2
98、; * 加数 * return 两个参数的和 */ public static double add(double v1, double v2 BigDecimal b1 = new BigDecimal(Double.toS
99、tring(v1; BigDecimal b2 = new BigDecimal(Double.toString(v2; return b1.add(b2.doubleValue(; /* * 提供精确的加法运算。 *
100、0; * param v1 * 被加数 * param v2 * 加数 * return 两个参数的和
101、60; */ public static BigDecimal add(String v1, String v2 BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.add(b2
102、; /* * 提供精确的加法运算。 String * * param v1 * 被加数 * param v2
103、; * 加数 * return 两个参数的和 */ public static String strAdd(String v1, String v2,int scale if (scale < 0
104、; throw new IllegalArgumentException( "The scale must be a positive integer or zero"
105、160; BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.add(b2.setScale(scale, BigDecimal.ROUND_HALF_UP.toString(;
106、; /* * 提供精确的减法运算。 * * param v1 * 被减数 * param v2 *
107、; 减数 * return 两个参数的差 */ public static double sub(double v1, double v2 BigDecimal b1 = new BigDecimal(Double.toString(v1;
108、; BigDecimal b2 = new BigDecimal(Double.toString(v2; return b1.subtract(b2.doubleValue(; /* * 提供精确的减法运算。 * * param v1
109、160; * 被减数 * param v2 * 减数 * return 两个参数的差 */ public s
110、tatic BigDecimal sub(String v1, String v2 BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.subtract(b2;
111、160; /* * 对一个数字取精度 * param v * param scale * return */ public static BigDecimal round(String v, int scale if (sca
112、le < 0 throw new IllegalArgumentException( "The scale must be a positive integer or zero"
113、; BigDecimal b = new BigDecimal(v; BigDecimal one = new BigDecimal("1" return b.divide(one, scale, BigDecimal.ROUND_HALF_UP;
114、60; /* * 提供精确的减法运算。String * * param v1 * 被减数 * param v2 *
115、160; 减数 * return 两个参数的差 */ public static String strSub(String v1, String v2,int scale if (scale < 0
116、0; throw new IllegalArgumentException( "The scale must be a positive integer or zero"
117、 BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.subtract(b2.setScale(scale, BigDecimal.ROUND_HALF_UP.toString(; /*
118、160; * 提供精确的乘法运算。 * * param v1 * 被乘数 * param v2 *
119、; 乘数 * return 两个参数的积 */ public static double mul(double v1, double v2 BigDecimal b1 = new BigDecimal(Double.toString(v1; BigDecimal
120、 b2 = new BigDecimal(Double.toString(v2; return b1.multiply(b2.doubleValue(; /* * 提供精确的乘法运算。 * * param v1 *
121、 被乘数 * param v2 * 乘数 * return 两个参数的积 */ public static BigDec
122、imal mul(String v1, String v2 BigDecimal b1 = new BigDecimal(v1; BigDecimal b2 = new BigDecimal(v2; return b1.multiply(b2; /* * 提供精确的乘法运算。 保留scale 位小数 * * param v1 * 被乘数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 535随机事件的独立性
- 2025-2030家电制造设备行业市场发展趋势分析供需及投资评估规划研究
- 幼儿园端午节主题活动教案汇编
- 2026年电气设备的冗余设计与维护
- 2026年室外照明安全与美观的平衡
- 港口工程安全检查标准汇编
- 医护人员心理疏导与压力管理
- 数学基础思维培养读书心得及实践应用
- 2026年桥梁健康监测的多层次数据分析框架
- 2026年桥梁健康监测的无人机应用探索
- 国家开放大学电大本科《流通概论》复习题库
- 机关档案汇编制度
- 2025年下半年四川成都温江兴蓉西城市运营集团有限公司第二次招聘人力资源部副部长等岗位5人参考考试题库及答案解析
- 2026福建厦门市校园招聘中小学幼儿园中职学校教师346人笔试参考题库及答案解析
- 2025年高职物流管理(物流仓储管理实务)试题及答案
- 设备管理体系要求2023
- 2025年学法减分试题及答案
- 2025年特种作业人员考试题库及答案
- 邢台课件教学课件
- 2025年新能源市场开发年度总结与战略展望
- 互联网企业绩效考核方案与实施细则
评论
0/150
提交评论