数学运算工具(精确运算)

  1. /**
  2. *
  3. * @author maple
  4. *
  5. */
  6. public abstract class AmountUtil {
  7. private AmountUtil() {
  8. }
  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. *
  24. * @param v1被减数
  25. * @param v2减数
  26. * @return
  27. */
  28. public static double sub(double v1, double v2) {
  29. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  30. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  31. return b1.subtract(b2).doubleValue();
  32. }
  33. /**
  34. * 乘法运算
  35. *
  36. * @param v1被乘数
  37. * @param v2乘数
  38. * @return
  39. */
  40. public static double mul(double v1, double v2) {
  41. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  42. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  43. return b1.multiply(b2).doubleValue();
  44. }
  45. /**
  46. *
  47. * 除法运算,当发生除不尽的情况时,精确到小数点以后2位,以后的数字四舍五入
  48. *
  49. * @param v1被除数
  50. * @param v2除数
  51. * @return
  52. */
  53. public static double div(double v1, double v2) {
  54. return div(v1, v2, 2);
  55. }
  56. /**
  57. *
  58. * 除法运算,当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入
  59. *
  60. * @param v1被除数
  61. * @param v2除数
  62. * @param scale精确到小数点以后几位
  63. * @return
  64. */
  65. public static double div(double v1, double v2, int scale) {
  66. if (scale < 0) {
  67. throw new IllegalArgumentException("The scale must be a positive integer or zero");
  68. }
  69. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  70. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  71. return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  72. }
  73. /**
  74. *
  75. * 四舍五入
  76. *
  77. * @param v需要四舍五入的数字
  78. * @param scale小数点后保留几位
  79. * @return
  80. */
  81. public static double round(double v, int scale) {
  82. if (scale < 0) {
  83. throw new IllegalArgumentException("The scale must be a positive integer or zero");
  84. }
  85. BigDecimal b = new BigDecimal(Double.toString(v));
  86. BigDecimal one = new BigDecimal("1");
  87. return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  88. }
  89. /**
  90. * 判断 a 与 b 是否相等
  91. *
  92. * @param a
  93. * @param b
  94. * @return a==b 返回true, a!=b 返回false
  95. */
  96. public static boolean equal(double a, double b) {
  97. BigDecimal v1 = BigDecimal.valueOf(a);
  98. BigDecimal v2 = BigDecimal.valueOf(b);
  99. if (v1.compareTo(v2) == 0) {
  100. return true;
  101. }
  102. return false;
  103. }
  104. /**
  105. * 判断 a 是否大于等于 b
  106. *
  107. * @param a
  108. * @param b
  109. * @return a&gt;=b 返回true, a&lt;b 返回false
  110. */
  111. public static boolean greaterThanOrEqualTo(double a, double b) {
  112. BigDecimal v1 = BigDecimal.valueOf(a);
  113. BigDecimal v2 = BigDecimal.valueOf(b);
  114. if (v1.compareTo(v2) >= 0) {
  115. return true;
  116. }
  117. return false;
  118. }
  119. /**
  120. * 判断 a 是否大于 b
  121. *
  122. * @param a
  123. * @param b
  124. * @return a&gt;b 返回true, a&lt;=b 返回 false
  125. */
  126. public static boolean bigger(double a, double b) {
  127. BigDecimal v1 = BigDecimal.valueOf(a);
  128. BigDecimal v2 = BigDecimal.valueOf(b);
  129. if (v1.compareTo(v2) == 1) {
  130. return true;
  131. }
  132. return false;
  133. }
  134. /**
  135. * 判断 a 是否小于 b
  136. *
  137. * @param a
  138. * @param b
  139. * @return a&lt;b 返回true, a&gt;=b 返回 false
  140. */
  141. public static boolean lessThan(double a, double b) {
  142. BigDecimal v1 = BigDecimal.valueOf(a);
  143. BigDecimal v2 = BigDecimal.valueOf(b);
  144. if (v1.compareTo(v2) == -1) {
  145. return true;
  146. }
  147. return false;
  148. }
  149. /**
  150. * 四舍五入保留小数点后两位
  151. *
  152. * @param num
  153. * @return
  154. */
  155. public static double roundDown(double num) {
  156. return Double.valueOf(String.format("%.2f", num));
  157. //return new BigDecimal(num).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  158. }
  159. public static void main(String[] args) {
  160. Double a = 101.005D;
  161. Double b = 0.0D;
  162. Double s = AmountUtil.sub(a, b);
  163. System.out.println(AmountUtil.roundDown(s));
  164. System.out.println(AmountUtil.div(101.1D, 1D, 2));
  165. }
  166. }

Java工具类(util) 之01- 数学运算工具(精确运算)的更多相关文章

  1. Java常用类(四)之数组工具类Arrays

    前言 数组的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作. 一.Arra ...

  2. Java常用类(五)之集合工具类Collections

    前言 Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作, 还提供了将集合对象置为不可变.对集合对象实现同步控 ...

  3. 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util

    Util.java,使用最广泛~代码中很多地方,都写了注释说明~基本不需要怎么解释了~ package net.micode.fileexplorer.util; import java.io.Fil ...

  4. Springboot在工具类(Util)中使用@Autowired注入Service

    1. 使用@Component注解标记工具类MailUtil: 2. 使用@Autowired注入我们需要的bean: 3. 在工具类中编写init()函数,并使用@PostConstruct注解标记 ...

  5. 工具类分享之获取Request/Response工具类《RequestContextHolderUtil》

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aiyaya_/article/details/78975893前言在开发spring web项目时, ...

  6. Android工具类-关于网络、状态的工具类

    下方是一个很好的监测网络.状态的工具类 public class NetworkUtils { /** * 网络是否可用 * * @param activity * @return */ public ...

  7. 57. Collections(list的工具类)、Arrays(数组的工具类)

    List集合的工具类(Collections): 注意:Collection是单列集合的根接口  Collections是操作集合对象的工具类 1.对list集合排序: sort(List) 根据自然 ...

  8. Spring中提供的集合工具类util CollectionUtils

    转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...

  9. 图片处理工具类 util

    PathUtil package util; public class PathUtil { private static String seperator = System.getProperty( ...

随机推荐

  1. WeifenLuo.WinFormsUI.Docking.dll的用法

    基本框架 说明 weiFenLuo.winFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可以实现像Visual Studio的窗口停靠.拖拽等功能.Weif ...

  2. 微信小程序——动画操作时,rpx 和 px 的转换计算。

    嫌长版本: var rpx = 10000; var systemInfo = wx.getSystemInfoSync(); var px = rpx / 750 * systemInfo.wind ...

  3. Lambda表达式&匿名方法

    “Lambda表达式“(lambda Expression)就是一个匿名函数(匿名方法),lambda表达式基于数学中的入演算得名. lambda运算符:所有的lambda表达式都是用新的lambda ...

  4. RabbitMQ---5、远程 IP 访问

    刚刚安装的RabbitMQ-Server-3.3.7,并且也已经开启了Web管理功能,但是现在存在一个问题: 出于安全的考虑,guest这个默认的用户只能通过http://localhost:1567 ...

  5. C#图片验证码绘制

    制作验证码.也可以画弧线之类..... //新建一个网站,在后台代码中引用一个using Stystem.Drawing的命名空间 Bitmap img = , ); //制作一个宽100,高50的画 ...

  6. GString惰性求值

    当对一个GString实例求值时,如果其中包含一个变量,该变量的值会被简单地打印到一个Writer,通常是一个StringWriter.然而,如果GString中包含的是一个闭包,而非变量,该闭包就会 ...

  7. JS中数组和对象的区别

  8. 关于Python的那点吐槽

    之前听到过别人有说过Python只是一个玩具做不了大项目,我当时是嗤之以鼻的,不说豆瓣这样的公司采用Python做的网站,GitHub上那么多大项目都是用Python写的,怎么能说Python只是一个 ...

  9. 创业公司感悟录之十个提醒—by李天平

    这几年经历过很多事,和朋友创业过, 自己也在创业(动软卓越),看过太多创业的人.创业的事,时不时静下心来把所看所感所想总结一下,记录一下,不足为鉴,仅作为自己在路上的警示与提醒,并和广大准备创业和创业 ...

  10. 实用的 Chrome Developers Tools

    做前端的,都喜欢 chrome , 里面的开发工具也很实用,网上看到文章不错,部分摘来分享 ------------------------------- console.log,中包含一些格式化的指 ...