为什么要用BigDecimal
一般货币计算的时候都要用到BigDecimal类,为什么一般不适用float或者double呢?
先看一下浮点数的二进制表示:
小数 0.125
0.125 * 2 = 0.25
0
0.25 * 2 = 0.5
0
0.5 * 2 = 1
1
算法是 *2 直到没有小数为止 ,得到0.125 二进制表示为0 . 0 0 1
小数 0.9
0.9 * 2 = 1.8
取整数部分 1
0.8(1.8的小数部分) * 2 = 1.6
1
0.6 * 2 = 1.2
1
0.2 * 2 = 0.4
0
0.4 * 2 = 0.8
0
0.8 * 2=1.6
1
0.6 * 2 =1.2
0
…..
….
从上至下:1 1 1 0 0 1 0 ......
计算过程无限循环,乘以2永远不可能消灭小数部分,这就证明,小数的二进制有时并不能精确表示;
这就如同十进制不能表示1/3一样;
货币类计算要求精度较高,非常大量的,很小的精度误差也会积少成多变成大误差,所以需要用到BigDecimal。
参考:https://blog.csdn.net/tfstone/article/details/81392540
为什么要用BigDecimal的更多相关文章
- BigDecimal 详细解析
参加工作之后发现公司项目的数据库有关数值的字段类型,很少是之前常用的float和double, 而是一个没有接触过的decimal,在Java中表示的类型为BigDecimal, 而在业务中常常有关B ...
- Java BigDecimal 转换,除法陷阱(转)
源地址: http://blog.csdn.net/niannian_315/article/details/24354251 今天在用BigDecimal“出现费解”现象,以前虽然知道要避免用, ...
- JAVA BigDecimal 小数点处理
1,保留两位小数 方法一:{ double c=3.154215; java.text.DecimalFormat myformat=new java.text.DecimalFormat(" ...
- BigDecimal 处理集合
1 创建一个BigDecimal 对象 BigDecimal Sum = new BigDecimal(0); 2 一个BigDecimal 对象,保留2位小数点 Sum.setScale(2,B ...
- BigDecimal用法详解
一.简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...
- java 大数据处理类 BigDecimal 解析
这两天,由于我的必修课概率论里经常要用到排列组合的计算,感觉很麻烦,加上现代智能手机的计算器是没有这方面功能的. 所以,就自己动手写了个安卓的 排列组合 计算器,用了一天,发现有很大的问题,阶乘达百亿 ...
- BigDecimal 加减乘除
BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5&quo ...
- 关于BigDecimal 和 double 类型保存金钱,以及精度问题,银行家舍入法
1. BigDecimal 类型数据 的创建,构造函数 有 public BigDecimal(BigInteger intVal, long val, int scale, int prec); p ...
- jdbctemplate中的批量更新使用,BigDecimal与造型的联系和区别
//jdbctemplate批量新增的使用MENU_ID_LIST是前端页面传递到后端控制层,再由控制层传到实现层的List //JdbcTemplate是spring jdbctemplate通过注 ...
- 使用BigDecimal进行精确运算以及格式化输出数字
一.引言 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 ...
随机推荐
- 【ARTS】01_33_左耳听风-201900624~201900630
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- page工具类
工具类 /** * @Title: PageUtil.java * @Package * @Description: TODO(用一句话描述该文件做什么) * @author licy * @date ...
- 分享一个关于Opencv的小总结
import cv2 #opencv读取的格式是BGR import numpy as np 一.#读入文件 img=cv2.imread('cat.jpg') #’’引号内是图片所在盘的地址+名 ...
- 使用说明(2S)
[Build Status] 功能 系统代理设置 PAC 模式和全局模式 [GFWList] 和用户规则 支持 HTTP 代理 支持多服务器切换 支持 UDP 代理 支持插件 下载 下载 [最新版]. ...
- Cassandra的安装
1.上传安装包到node01 cd /export/softwares 2.解压 tar -zxvf apache-cassandra-3.11.5-bin.tar.gz -C ../servers ...
- 携程Apollo统一配置中心的搭建和使用
原文链接:https://blog.csdn.net/luhong327/article/details/81453001 一.Apollo配置中心介绍 1.What is Apollo 1.1 Ap ...
- 第一个web 程序(servlet 和 jsp )&
开发工具是便于程序员的编写,真正运行的代码不是编写的代码,而是tomcat服务器中部署好的代码.tomcat 会根据请求自动调用对应的代码进行请求处理. 可能遇到的问题: 1. 没有classes文件 ...
- SSH简介及两种远程登录的方法
出处 https://blog.csdn.net/li528405176/article/details/82810342 目录 SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别 ...
- 无线网卡SP-WL450U的驱动问题
修改win10的设备驱动为需要的驱动,SP-WL450U的驱动问题 解决SP-WL450U的驱动问题,在电脑上安装无线网卡后,总是用不上5G信号,只能选择2.4G.重新安装程序后也不行,在反复试用后发 ...
- 变量————if语句——结构使用
1简述变量的命名规范 变量是以字母 数字 下划线组合而成 不能以数字开头 不能使用python中的关键字命名 变量要具有可描述性 区分大小写 name变量是什么数据类型通过代码检测 name = in ...