Java 避免精度丢失之BigDecimal 运算
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入
import java.math.BigDecimal; /** 计算工具类 */ public class Arith {/** 加* 提供精确的加法运算。 * @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();}/** 除* 提供(相对)精确的除法运算。当发生除不尽的情况时,由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();} };
转载于:https://www.cnblogs.com/unknows/p/7446558.html
Java 避免精度丢失之BigDecimal 运算相关推荐
- Java float精度丢失问题的解决
之前在进行蓝桥杯赛题训练的时候,有一题涉及到实数,提交以后有一个案例通过不了,检查一看发现是数据精度丢失了,导致最终的结果出错,现记录如下. 首先,让我们来测试一下 测试代码: import java ...
- pgsql中float4导致java程序精度丢失_Java基础系列02
注释 Java中支持三种注释:1.单行注释以//开始换行结束.2.多行注释以/*开始,以*/结束.3.说明注释以/**开始,以*/结束. 关键字 关键字:是指在程序中,Java已经定义好的单词,具有特 ...
- java 小数精度问题
1.原因 由于浮点数在转化为二进制时无法运算完结,所以会无限循环下去,导致运算结果达不到期望值. 例如:1.14,转化为二进制,然后再转回十进制就变成了:1.139999999999999902300 ...
- Double计算精度丢失(金融入门知识点)
Double计算精度丢失(金融入门知识点) 一.double精度丢失 二.为什么double会精度丢失 三.BigDecimal错误的用法 四.BigDecimal正确的用法 Double计算精度丢失 ...
- Java中BigDecimal解决精度丢失问题
1.我们先看一个例子 可以看到在Java中进行浮点数运算的时候,会出现丢失精度的问题.那么我们如果在进行商品价格计算的时候,就会出现问题.很有可能造成我们手中有0.06元,却无法购买一个0.05元和一 ...
- 关于Java浮点数运算精度丢失问题
2019独角兽企业重金招聘Python工程师标准>>> 关于Java浮点数运算精度丢失问题 博客分类: java 前几天看了一个朋友的博客,说Java中浮点数运算精度丢失的问题,他给 ...
- java数值运算后精度丢失问题
最近连续俩次遇到运算后数值精度丢失问题,所以记录一下. 问题1:java计算百分比,应该得到57,可返回的就是56 在java代码中 BigDecimal progress;BigDecimal a ...
- java中double类型精度丢失问题及解决方法
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源: https://blog.csdn.net/yacolsp ...
- bigdicmal除法精度设置_Java BigDecimal浮点数运算--如何保证运算精度不溢出
加减乘除四则运算是高级程序设计语言(不论机器语言.汇编还是其他高级语言)最基础的部分,Java作为最流行的软件开发语言之一,涉及四则运算的程序代码和功能业务随处可见.在笔者从事的基于Java语言银行. ...
最新文章
- 2017年vb计算机考试,2017年计算机二级VB考试习题及答案
- javase 超市库存系统
- JPA 2 | 动态查询与命名查询
- [转]Eclipse Java注释模板设置详解
- day52 Django全流程
- 牛客15555 1 + 2 = 3?
- 8除以2表示什么意思_八字中劫财,比肩分别表示什么意思
- java stringbuffer原理_深入理解Java:String
- 注意:ORACLE 11G ADG RAC 这个情况下并不能高可用
- 二叉树的创建与遍历(C++)
- OSSIM5 自定义安装
- HAProxy+Hive构建高可用数据挖掘集群
- 关于elastic-job 分片与线程问题
- 【零基础】量子纠缠图像问世,简单解读实验原理
- 剑指offer整理(附python代码)——递归
- python实现简易聊天室程序
- 升级Win11后Office无法验证此产品的许可证怎么办?
- Edge Case UVA - 1646
- 【PS】61款中国风古典背景水墨山水古风韵味PSD分层设计素材
- SpringBoot成长笔记(一)环境搭建
热门文章
- linux postgres用户,关于linux:在启动时创建postgres用户
- java格式化星期_在Java中使用SimpleDateFormat格式化星期几
- C++写的一个简单的词法分析器(分析C语言)
- ViewTreeObserver
- 富数据控件 GridView(定义列、格式化、样式)
- golang中的执行规则
- windows下进程间通信的(13种方法)
- UART, SPI, IIC的详解及三者的区别和联系
- 下列代码之后的结果为()?
- linux网络编程二:基础socket, bind, listen, accept, connect