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

  1. public static double add(double v1,double v2)
  2. public static double sub(double v1,double v2)
  3. public static double mul(double v1,double v2)
  4. public static double div(double v1,double v2)
  5. public static double div(double v1,double v2,int scale)
  6. public static double round(double v,int scale)
  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. };

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

  1. Java BigDecimal类型的 加减乘除运算

    原文: https://blog.csdn.net/xuwei_net/article/details/81253471 加法:add 减法:subtract 乘法:multiply 除法:divid ...

  2. 使用Java BigDecimal进行精确运算

    首先我们先来看如下代码示例: public class Test_1 {     public static void main(String[] args) {         System.out ...

  3. Java BigDecimal进行精确计算

    前言 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以 ...

  4. 使用BigDecimal进行精确运算以及格式化输出数字

    一.引言    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 ...

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

    一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...

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

    import java.math.BigDecimal; /** * 精确的double加减乘除运算 * @author cyf * */ public class DoubleUtil { /** ...

  7. BigDecimal加减乘除运算(转)

    java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val) Translates a doub ...

  8. Java BigDecimal详解

    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 较为精确的快速近 ...

  9. Java BigDecimal详解,提供了丰富的四舍五入规则

    java.math.BigDecimal类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作. toString()方法提供BigDecimal的规范表示.它使用户可以完全控制舍入行为. 提供 ...

随机推荐

  1. 《面向对象程序设计》六 GUI

    git传送门 我这无药可救的拖延症和懒癌orz 主界面 文件读取界面 提示界面 最初选择vs+mfc,发现许多自动生成的代码读不懂(不须懂),尝试qt后感觉人生迎来了希望,看了推荐的视频与教程稍微了解 ...

  2. 【Alpha】团队课程展示

    团队展示报告 团队分工 陈涵 PM + 后端开发 ,统筹全队安排,完成了登录界面,以及一部分部门模块和课程中教室模块的编写. 张鹏 后端开发,主要完成了主界面和其他功能界面的编写,课程界面的编写,以及 ...

  3. Ecstore 默认图片压缩质量差的问题解决方法

    修改app/image/lib/clip.php文件 }elseif( function_exists('imagecopyresampled')){ $quality = 80; $image_p ...

  4. [笔记] 整除分块 & 异或性质

    整除分块 参考资料:整除分块_peng-ym OI生涯中的各种数论算法的证明 公式 求:\(\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\) 对于每个\(\lfloo ...

  5. Jenkins RCE(CVE-2018-1000861)

    先说通过IDEA利用JPDA远程调试tomcat程序 在catalina.sh添加,或者catalina.bat内容不动用如下命令开启,默认是开启8000端口 set JAVA_OPTS=-Xdebu ...

  6. lua-resty-gearman模块

    粘贴一段百度对gearman的解释: Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统. lu ...

  7. ArcGIS中的坐标系统定义与投影转换方法

    坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统的GIS数据是不完善的,因此在ArcGI ...

  8. Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值

    大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属 ...

  9. FFMpeg笔记(七) 代码结构分析,以HLS为例

    HLS流在播放时是先解协议(hls.c)后解封装(mpegts.c),libavformat下的hls.c和mpegts.c实际上是同一个级别的,同属于demuxer. 一.解HLS协议 1. FFm ...

  10. 【stylus】stylus在webstrom中的识别

    <style lang="stylus" rel="stylesheet/stylus"> @import './common/stylus/mix ...