java中的BigDecimal类型
1.什么是BigDecimal
之前我们用到的double和float都可以处理16位的有效数字,然而多数运用于工程中,要求不需要很精确,但是在商业中需要精准运算,因此Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。在做精确运算时,我们不能使用传统的算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。
2.采用浮点运算存在的一些问题
System.out.println(0.2 + 0.1);
输出结果为:
主要原因就是计算机中所有的数字都是二进制表示的,但是浮点数没有办法完全用二进制表示,用二进制表示浮点数会损失一定的精度,就像上面0.1用二进制表示时是无限接近于0.1,就变成了0.2+0.1000000000004。
3.BigDecimal构造器
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象 。
在2中已经说到采用浮点类型表示一个数会存在精度丢失,因此用的·第二种构造方法时也会存在精度丢失问题。所以通常建议第三种构造方法。
4.常用方法
4.1 数学运算
public BigDecimal add(BigDecimal value); public BigDecimal subtract(BigDecimal value); public BigDecimal multiply(BigDecimal value); public BigDecimal divide(BigDecimal value);
四个方法分别对应数学运算中的加减乘除,使用时需要通过一个BigDecimal对象来调用方法。
4.2 截断和四舍五入
public static void main(String[] args){BigDecimal a = new BigDecimal("2.1111111");a = a.setScale(4, RoundingMode.HALF_UP); //保留后4位,并且四舍五入System.out.println(a);}
注:以上运算生成的结果是一个新的BigDecimal类型,类似于String不可变。
4.3 实际使用
在开发微信支付的时候设置转账金额都是用BigDecimal
void create(String orderId, BigDecimal amount);
当创建一个订单时:
payService.create("324132462643", BigDecimal.valueOf(0.01));
这里使用的构造器就是先将double型转变为string。类似于:
new BigDecimal("0.01");
java中的BigDecimal类型相关推荐
- Java中使用BigDecimal类型比较大小
BigDecimal使用心得 BigDecimal使用场景 为什么要用BigDecimal 用BigDecimal的compareTo方法做大小判断 BigDecimal使用场景 BigDecimal ...
- Java中的BigDecimal类你真的了解吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...
- Java 中的 BigDecimal,你真的会用吗?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | LanceToBigData 来源 | cnb ...
- Java 中的 BigDecimal 类你了解多少?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 作者:HikariCP 链接: ...
- 后端:Java中的BigDecimal类你了解多少?
我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题.如下一段代码: System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42) ...
- Java中的BigDecimal,你真的会用吗?
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Forgetting someone doesn't mean never ...
- Java中的BigDecimal类你了解多少?
点击上方"IT牧场",选择"设为星标"技术干货每日送达! 来源:https://urlify.cn/naiEva 前言 我们都知道浮点型变量在进行计算的时候会出 ...
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- java中的null类型---有关null的9件事
摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...
- byte java byte_详解java中的byte类型
Java中整数类型有:byte占8位, short 占16位, int占32位, long占64位 Java也提供了一个byte数据类型,并且是基本类型中的整数类型.java byte是作为最小的数字 ...
最新文章
- 上传图片,要求图片200100象素,大小小于2M
- 比尔盖茨聘请投资高手,26年亏掉4300亿美金!
- x3m文件怎么转换成mp3_视频中的音频怎么单独提取出来转换成mp3格式
- java明文发送_使用java MD5加密网络明文
- 2022年中国足球球迷行为洞察白皮书
- MSSQL中使用CASE函数来灵活返回结果
- mybatis如何防止sql注入
- FFMPEG基于内存的转码实例——输入输出视频均在内存
- (转)python3 安装 BeautifulSoup 提示 Unit tests have failed!
- 不会写Java面试简历?看这一篇就够了(项目经历,个人技能)
- TextBlock/Textbox
- 图解大数据 | 大数据生态与应用导论
- 按键精灵 手机 oracle,按键精灵Android版:软件使用
- win10重置计算机网络设置,为你解答win10下如何重置网络
- Java学习路线:day1 Java语言概述
- mongoose 之Shema
- 实验二——————路由器口令配置
- 剖析cmwap和cmnet接入点区别和应用
- 65页PPT|数字化转型中的大数据治理如何落地
- 【云原生之Docker实战】使用Docker部署Rap2开源接口管理工具
热门文章
- 数学四大思想八大方法_数学四大思想方法
- bp神经网络反向传播推导,bp神经网络的传递函数
- Python-GUI界面设计(tkinter)
- hp/博科光纤交换机配置小记
- 基于html的美食网站——速鲜站餐饮食品(HTML+CSS+JavaScript)大学生网页制作教程 表格布局网页模板 学生HTML静态美食网页设计作业成品 简单网页制作代码 学生美食网页作品
- 记录mikrotik路由器的折腾过程
- win10怎么查看计算机用户名和密码,技术员详解win10系统查看电脑密码的详细方案...
- 应该怎样读TAOCP
- JavaScript在线解压 ZIP 文件 JavaScript 怎样在线解压 ZIP,jszip实现解压压缩包,并下载压缩包内文件
- C语言程序设计--新生入学登记系统