编程回忆之java回忆(double和Double)

你的名字 2022-09-19 10:42 263阅读 0赞

在项目当中,我们经常会遇到数据计算,浮点数的计算算是比较经常使用到的,什么是浮点数,说白了就是小数啦。小数我们经常是用double进行声明的,但是我们写代码时候,有时候也用Double进行声明的,那他们有什么区别呢。

最简单的就是,double是原始类型,Double是引用类型,那他们在实际的使用当中有什么区别么。肯定是有的,最明显就是初始值问题,引用类型的初始值是null,原始类型的初始值跟他们的类型有关。还有什么不同呢,其实在工作中影响比较大的是数据大小的比较和数据的运算。原始类型可以直接使用<,>,==号进行数据大小的比较,运算可以直接使用-,+,*,/进行数据的运算,但是引用类型不能这么做。特别当数据精度提高后,直接使用Double进行加减乘除是会发生错误的。

但是在项目当中,我们又很容易遇到Double对象的加减乘除,那要怎么去处理呢,下面贴出一段代码,让大家参考一下Double的加减乘数。

  1. import java.math.BigDecimal;
  2. public class douleMath {
  3. // 默认除法运算精度
  4. private static final int DEFAULT_DIV_SCALE = 10;
  5. /**
  6. *
  7. * 提供精确的加法运算。
  8. *
  9. * @param Dou1
  10. *
  11. * @param Dou2
  12. *
  13. * @return 两个参数的和
  14. *
  15. */
  16. public static double add(double Dou1, double Dou2)
  17. {
  18. BigDecimal Big1 = new BigDecimal(Double.toString(Dou1));
  19. BigDecimal Big2 = new BigDecimal(Double.toString(Dou2));
  20. return Big1.add(Big2).doubleValue();
  21. }
  22. /**
  23. *
  24. * 提供精确的减法运算。
  25. *
  26. * @param Dou1
  27. *
  28. * @param Dou2
  29. *
  30. * @return 两个参数的差
  31. *
  32. */
  33. public static double subtract(double Dou1, double Dou2)
  34. {
  35. BigDecimal Big1 = new BigDecimal(Double.toString(Dou1));
  36. BigDecimal Big2 = new BigDecimal(Double.toString(Dou2));
  37. return Big1.subtract(Big2).doubleValue();
  38. }
  39. /**
  40. *
  41. * 提供精确的乘法运算。
  42. *
  43. * @param Dou1
  44. *
  45. * @param Dou2
  46. *
  47. * @return 两个参数的积
  48. *
  49. */
  50. public static double multiply(double Dou1, double Dou2)
  51. {
  52. BigDecimal Big1 = new BigDecimal(Double.toString(Dou1));
  53. BigDecimal Big2 = new BigDecimal(Double.toString(Dou2));
  54. return Big1.multiply(Big2).doubleValue();
  55. }
  56. /**
  57. *
  58. * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
  59. *
  60. * 小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN
  61. *
  62. * @param Dou1
  63. *
  64. * @param Dou2
  65. *
  66. * @return 两个参数的商
  67. *
  68. */
  69. public static double divide(double Dou1, double Dou2)
  70. {
  71. return divide(Dou1, Dou2, DEFAULT_DIV_SCALE);
  72. }
  73. /**
  74. *
  75. * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
  76. *
  77. * 定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN
  78. *
  79. * @param Dou1
  80. *
  81. * @param Dou2
  82. *
  83. * @param scale
  84. * 表示需要精确到小数点以后几位。
  85. *
  86. * @return 两个参数的商
  87. *
  88. */
  89. public static double divide(double Dou1, double Dou2, int scale)
  90. {
  91. return divide(Dou1, Dou2, scale, BigDecimal.ROUND_HALF_UP);
  92. }
  93. /**
  94. *
  95. * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
  96. *
  97. * 定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式
  98. *
  99. * @param Dou1
  100. *
  101. * @param Dou2
  102. *
  103. * @param scale
  104. * 表示需要精确到小数点以后几位
  105. *
  106. * @param round_mode
  107. * 表示用户指定的舍入模式
  108. *
  109. * @return 两个参数的商
  110. *
  111. */
  112. public static double divide(double Dou1, double Dou2, int scale, int round_mode) {
  113. if (scale < 0){
  114. throw new IllegalArgumentException(
  115. "精度必须大于等于0");
  116. }
  117. BigDecimal Big1 = new BigDecimal(Double.toString(Dou1));
  118. BigDecimal Big2 = new BigDecimal(Double.toString(Dou2));
  119. return Big1.divide(Big2, scale, round_mode).doubleValue();
  120. }
  121. }

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读

    相关 编程回忆java回忆(正则表达式)

    恩,让我想想,第一次用正则表达式是什么时候呢。那是一个英语阅读插件,用于读取内容后,智能生成阅读标签,统计标签出现的次数和频率。通过一套算法,分析阅读者的阅读习惯。听起来是