java 浮点运算
CreateTime--2017年12月1日11:35:00
Author:Marydon
java 浮点类型(float、double)间的运算工具类
- /**
- * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类
- *
- * @author Marydon
- * @createTime 2017年12月1日上午11:39:15
- * @updateTime
- * @Email:Marydon20170307@163.com
- * @description 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供了精确的浮点数运算,包括加减乘除和四舍五入。
- * @version:1.0.0
- */
- public class ArithmeticUtiles {
- /**
- * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类
- *
- * @author wupenghui 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
- */
- // 默认除法运算精度
- private static final int DEF_DIV_SCALE = 10;
- // 这个类不能实例化
- private ArithmeticUtiles() {
- }
- /**
- * 提供精确的加法运算
- *
- * @param v1
- * 被加数
- * @param v2
- * 加数
- * @return 两个参数的和
- */
- public static double add(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.add(b2).doubleValue();
- }
- /**
- * 提供精确的减法运算
- *
- * @param v1
- * 被减数
- * @param v2
- * 减数
- * @return 两个参数的差
- */
- public static double sub(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.subtract(b2).doubleValue();
- }
- /**
- * 提供精确的乘法运算
- *
- * @param v1
- * 被乘数
- * @param v2
- * 乘数
- * @return 两个参数的积
- */
- public static double mul(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.multiply(b2).doubleValue();
- }
- /**
- * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入
- *
- * @param v1
- * 被除数
- * @param v2
- * 除数
- * @return 两个参数的商
- */
- public static double div(double v1, double v2) {
- return div(v1, v2, DEF_DIV_SCALE);
- }
- /**
- * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。
- *
- * @param v1
- * 被除数
- * @param v2
- * 除数
- * @param scale
- * 表示表示需要精确到小数点以后几位。
- * @return 两个参数的商
- */
- public static double div(double v1, double v2, int scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
- }
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
- }
- /**
- * 提供精确的小数位四舍五入处理。
- *
- * @param v
- * 需要四舍五入的数字
- * @param scale
- * 小数点后保留几位
- * @return 四舍五入后的结果
- */
- public static double round(double v, int scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
- }
- BigDecimal b = new BigDecimal(Double.toString(v));
- BigDecimal one = new BigDecimal("1");
- return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
- }
- /**
- * 提供精确的类型转换(Float)
- *
- * @param v
- * 需要被转换的数字
- * @return 返回转换结果
- */
- public static float convertsToFloat(double v) {
- BigDecimal b = new BigDecimal(v);
- return b.floatValue();
- }
- /**
- * 提供精确的类型转换(Int)不进行四舍五入
- *
- * @param v
- * 需要被转换的数字
- * @return 返回转换结果
- */
- public static int convertsToInt(double v) {
- BigDecimal b = new BigDecimal(v);
- return b.intValue();
- }
- /**
- * 提供精确的类型转换(Long)
- *
- * @param v
- * 需要被转换的数字
- * @return 返回转换结果
- */
- public static long convertsToLong(double v) {
- BigDecimal b = new BigDecimal(v);
- return b.longValue();
- }
- /**
- * 返回两个数中大的一个值
- *
- * @param v1
- * 需要被对比的第一个数
- * @param v2
- * 需要被对比的第二个数
- * @return 返回两个数中大的一个值
- */
- public static double returnMax(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.max(b2).doubleValue();
- }
- /**
- * 返回两个数中小的一个值
- *
- * @param v1
- * 需要被对比的第一个数
- * @param v2
- * 需要被对比的第二个数
- * @return 返回两个数中小的一个值
- */
- public static double returnMin(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.min(b2).doubleValue();
- }
- /**
- * 精确对比两个数字
- *
- * @param v1
- * 需要被对比的第一个数
- * @param v2
- * 需要被对比的第二个数
- *
- * @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
- */
- public static int compareTo(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.compareTo(b2);
- }
- }
java 浮点运算的更多相关文章
- java浮点运算的陷阱
首先呢,i你要明白double和float. Inifinity: 例如:syso(5.0/0.0+" 和"+0.0 /0.0); 浮点运算的0.0不是真正意义上的0,而是非常接近 ...
- Java浮点运算-BigDecimal
package com.hsun.test; import static java.lang.System.out; import java.math.BigDecimal; public class ...
- java中多个数字运算后值不对(失真)处理方法
最近遇到一个bug ,在java里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.8999999999,丢失精度了,原来这是Java浮点运算的一个bug. 解决 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 《深入Java虚拟机学习笔记》- 第14章 浮点运算
<深入Java虚拟机学习笔记>- 第13章 浮点运算
- Java及Javascript中的浮点运算
在进行金额计算,及某些精确计算时,会出现意想不到的很多小数的情况. 对Java 采用BigDecimal,如下代码示例 package number; import java.math.BigDeci ...
- 《Effective Java》学习笔记——积累和激励
从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
- Core Java 总结(数据类型,表达式问题)
2016-10-18 整理 写一个程序判断整数的奇偶 public static boolean isOdd(int i){ return i % 2 == 1; } 百度百科定义:奇数(英文:odd ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
随机推荐
- JAVA生成并导出json文件
将一个list集合转换成json文件并导出: 数据集合: List<Object> agencyList = new ArrayList<Object>(); Map<S ...
- Eclipse自定义的透视图如何删除掉?
- 【BZOJ】【3931】【CQOI2015】网络吞吐量
最短路+最大流 思维难度并不高,其实题面几乎已经把算法讲完了…… 练习模板的好题= = 哦对了,求最短路和最大流的时候都得开long long……QwQ /********************** ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- SQL-根据多个条件更新数据
根据多个条件更新数据 UPDATE sphwph SET BKXSHL=t2.BKXSHL FROM sphwph t1,sphwph_170420 t2 --(SELECT a.* FROM dbo ...
- [转]使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化
原文: https://www.cnblogs.com/phpdragon/p/5314650.html ----------------------------------------------- ...
- php ci框架中载入css和js文件失败的原因及解决方法
在将html页面整合到ci框架里面的时候,载入css和js失败. 原因是ci框架是入口的框架 对框架中文件的全部请求都须要经过index.php处理完毕,当载入外部的css和js文件的时候要使 用ba ...
- VS2008中MFC对话框界面编程Caption中文乱码的解决办法
文章转载自http://blog.csdn.net/ajioy/article/details/6877646 最近在使用VS2008编写一个基于对话框的程序时,在对话框中添加Static控件,编写其 ...
- Log4net的不能产生Log文件的问题
[问题] 用如下的步骤应用了Log4Net: 建立了一个公用的项目, 在里面引入了Log4net的Nuget package. 在公用的项目中建立了一个类,加上了Log4net的attribute. ...
- 解决webstom failed to change read-only files
我百思不得其解的是,为何我的文件不让我更改,变成了只读模式,后来我仔细回忆了一下,原来是因为我使用了root权限,来安装thinkjs之后,webstom没有root权限,所以我使用root,在终端敲 ...