CreateTime--2017年12月1日11:35:00

Author:Marydon

java 浮点类型(float、double)间的运算工具类

  1. /**
  2. * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类
  3. *
  4. * @author Marydon
  5. * @createTime 2017年12月1日上午11:39:15
  6. * @updateTime
  7. * @Email:Marydon20170307@163.com
  8. * @description 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供了精确的浮点数运算,包括加减乘除和四舍五入。
  9. * @version:1.0.0
  10. */
  11. public class ArithmeticUtiles {
  12.  
  13. /**
  14. * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类
  15. *
  16. * @author wupenghui 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
  17. */
  18. // 默认除法运算精度
  19. private static final int DEF_DIV_SCALE = 10;
  20.  
  21. // 这个类不能实例化
  22. private ArithmeticUtiles() {
  23. }
  24.  
  25. /**
  26. * 提供精确的加法运算
  27. *
  28. * @param v1
  29. * 被加数
  30. * @param v2
  31. * 加数
  32. * @return 两个参数的和
  33. */
  34. public static double add(double v1, double v2) {
  35. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  36. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  37. return b1.add(b2).doubleValue();
  38. }
  39.  
  40. /**
  41. * 提供精确的减法运算
  42. *
  43. * @param v1
  44. * 被减数
  45. * @param v2
  46. * 减数
  47. * @return 两个参数的差
  48. */
  49. public static double sub(double v1, double v2) {
  50. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  51. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  52. return b1.subtract(b2).doubleValue();
  53. }
  54.  
  55. /**
  56. * 提供精确的乘法运算
  57. *
  58. * @param v1
  59. * 被乘数
  60. * @param v2
  61. * 乘数
  62. * @return 两个参数的积
  63. */
  64. public static double mul(double v1, double v2) {
  65. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  66. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  67. return b1.multiply(b2).doubleValue();
  68. }
  69.  
  70. /**
  71. * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入
  72. *
  73. * @param v1
  74. * 被除数
  75. * @param v2
  76. * 除数
  77. * @return 两个参数的商
  78. */
  79. public static double div(double v1, double v2) {
  80. return div(v1, v2, DEF_DIV_SCALE);
  81. }
  82.  
  83. /**
  84. * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。
  85. *
  86. * @param v1
  87. * 被除数
  88. * @param v2
  89. * 除数
  90. * @param scale
  91. * 表示表示需要精确到小数点以后几位。
  92. * @return 两个参数的商
  93. */
  94. public static double div(double v1, double v2, int scale) {
  95. if (scale < 0) {
  96. throw new IllegalArgumentException("The scale must be a positive integer or zero");
  97. }
  98. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  99. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  100. return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  101. }
  102.  
  103. /**
  104. * 提供精确的小数位四舍五入处理。
  105. *
  106. * @param v
  107. * 需要四舍五入的数字
  108. * @param scale
  109. * 小数点后保留几位
  110. * @return 四舍五入后的结果
  111. */
  112. public static double round(double v, int scale) {
  113. if (scale < 0) {
  114. throw new IllegalArgumentException("The scale must be a positive integer or zero");
  115. }
  116. BigDecimal b = new BigDecimal(Double.toString(v));
  117. BigDecimal one = new BigDecimal("1");
  118. return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  119. }
  120.  
  121. /**
  122. * 提供精确的类型转换(Float)
  123. *
  124. * @param v
  125. * 需要被转换的数字
  126. * @return 返回转换结果
  127. */
  128. public static float convertsToFloat(double v) {
  129. BigDecimal b = new BigDecimal(v);
  130. return b.floatValue();
  131. }
  132.  
  133. /**
  134. * 提供精确的类型转换(Int)不进行四舍五入
  135. *
  136. * @param v
  137. * 需要被转换的数字
  138. * @return 返回转换结果
  139. */
  140. public static int convertsToInt(double v) {
  141. BigDecimal b = new BigDecimal(v);
  142. return b.intValue();
  143. }
  144.  
  145. /**
  146. * 提供精确的类型转换(Long)
  147. *
  148. * @param v
  149. * 需要被转换的数字
  150. * @return 返回转换结果
  151. */
  152. public static long convertsToLong(double v) {
  153. BigDecimal b = new BigDecimal(v);
  154. return b.longValue();
  155. }
  156.  
  157. /**
  158. * 返回两个数中大的一个值
  159. *
  160. * @param v1
  161. * 需要被对比的第一个数
  162. * @param v2
  163. * 需要被对比的第二个数
  164. * @return 返回两个数中大的一个值
  165. */
  166. public static double returnMax(double v1, double v2) {
  167. BigDecimal b1 = new BigDecimal(v1);
  168. BigDecimal b2 = new BigDecimal(v2);
  169. return b1.max(b2).doubleValue();
  170. }
  171.  
  172. /**
  173. * 返回两个数中小的一个值
  174. *
  175. * @param v1
  176. * 需要被对比的第一个数
  177. * @param v2
  178. * 需要被对比的第二个数
  179. * @return 返回两个数中小的一个值
  180. */
  181. public static double returnMin(double v1, double v2) {
  182. BigDecimal b1 = new BigDecimal(v1);
  183. BigDecimal b2 = new BigDecimal(v2);
  184. return b1.min(b2).doubleValue();
  185. }
  186.  
  187. /**
  188. * 精确对比两个数字
  189. *
  190. * @param v1
  191. * 需要被对比的第一个数
  192. * @param v2
  193. * 需要被对比的第二个数
  194. *
  195. * @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
  196. */
  197. public static int compareTo(double v1, double v2) {
  198. BigDecimal b1 = new BigDecimal(v1);
  199. BigDecimal b2 = new BigDecimal(v2);
  200. return b1.compareTo(b2);
  201. }
  202.  
  203. }
 

java 浮点运算的更多相关文章

  1. java浮点运算的陷阱

    首先呢,i你要明白double和float. Inifinity: 例如:syso(5.0/0.0+" 和"+0.0 /0.0); 浮点运算的0.0不是真正意义上的0,而是非常接近 ...

  2. Java浮点运算-BigDecimal

    package com.hsun.test; import static java.lang.System.out; import java.math.BigDecimal; public class ...

  3. java中多个数字运算后值不对(失真)处理方法

    最近遇到一个bug ,在java里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.8999999999,丢失精度了,原来这是Java浮点运算的一个bug. 解决 ...

  4. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  5. 《深入Java虚拟机学习笔记》- 第14章 浮点运算

    <深入Java虚拟机学习笔记>- 第13章 浮点运算

  6. Java及Javascript中的浮点运算

    在进行金额计算,及某些精确计算时,会出现意想不到的很多小数的情况. 对Java 采用BigDecimal,如下代码示例 package number; import java.math.BigDeci ...

  7. 《Effective Java》学习笔记——积累和激励

    从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...

  8. Core Java 总结(数据类型,表达式问题)

    2016-10-18 整理 写一个程序判断整数的奇偶 public static boolean isOdd(int i){ return i % 2 == 1; } 百度百科定义:奇数(英文:odd ...

  9. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

随机推荐

  1. JAVA生成并导出json文件

    将一个list集合转换成json文件并导出: 数据集合: List<Object> agencyList = new ArrayList<Object>(); Map<S ...

  2. Eclipse自定义的透视图如何删除掉?

  3. 【BZOJ】【3931】【CQOI2015】网络吞吐量

    最短路+最大流 思维难度并不高,其实题面几乎已经把算法讲完了…… 练习模板的好题= = 哦对了,求最短路和最大流的时候都得开long long……QwQ /********************** ...

  4. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  5. SQL-根据多个条件更新数据

    根据多个条件更新数据 UPDATE sphwph SET BKXSHL=t2.BKXSHL FROM sphwph t1,sphwph_170420 t2 --(SELECT a.* FROM dbo ...

  6. [转]使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化

    原文: https://www.cnblogs.com/phpdragon/p/5314650.html ----------------------------------------------- ...

  7. php ci框架中载入css和js文件失败的原因及解决方法

    在将html页面整合到ci框架里面的时候,载入css和js失败. 原因是ci框架是入口的框架 对框架中文件的全部请求都须要经过index.php处理完毕,当载入外部的css和js文件的时候要使 用ba ...

  8. VS2008中MFC对话框界面编程Caption中文乱码的解决办法

    文章转载自http://blog.csdn.net/ajioy/article/details/6877646 最近在使用VS2008编写一个基于对话框的程序时,在对话框中添加Static控件,编写其 ...

  9. Log4net的不能产生Log文件的问题

    [问题] 用如下的步骤应用了Log4Net: 建立了一个公用的项目, 在里面引入了Log4net的Nuget package. 在公用的项目中建立了一个类,加上了Log4net的attribute. ...

  10. 解决webstom failed to change read-only files

    我百思不得其解的是,为何我的文件不让我更改,变成了只读模式,后来我仔细回忆了一下,原来是因为我使用了root权限,来安装thinkjs之后,webstom没有root权限,所以我使用root,在终端敲 ...