博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BigDecimal的引入和概述
阅读量:5043 次
发布时间:2019-06-12

本文共 1562 字,大约阅读时间需要 5 分钟。

代码

1         System.out.println(0.09 + 0.01);2         System.out.println(0.1 - 0.32);3         System.out.println(1.015 * 100);4         System.out.println(1.301 / 100);

运行结果

1     0.099999999999999992     -0.223     101.499999999999994     0.013009999999999999

分析

为什么和我们预想的不一样呢?借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。

BigDecimal的构造方法

1)BigDecimal(String val) :将 BigDecimal 的字符串表示形式转换为 BigDecimal。

注:这里只推荐用一种String参数的构造方法,因为其他的构造方法多少都具有一些不可预知性。。。

常用方法

1)add(BigDecimal augend) :返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。(这里的标度就是小数点后取几位的意思)

2)subtract(BigDecimal subtrahend) :返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。
3)multiply(BigDecimal multiplicand) :返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。
4)divide(BigDecimal divisor) :返回一个 BigDecimal,其值为 (this / divisor),其首选标度为 (this.scale() - divisor.scale());如果无法表示准确的商值(因为它有无穷的十进制扩展),则抛出 ArithmeticException。
5)divide(BigDecimal divisor, int scale, int roundingMode) :返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。

1         BigDecimal bd1 = new BigDecimal("1.031");2         BigDecimal bd2 = new BigDecimal("100");3         System.out.println(bd1.divide(bd2, 3, BigDecimal.ROUND_HALF_UP));

运行结果

1     0.010

分析

最后一个除法的三个参数分别是:除数、小数点后保留几位,取舍方式(这里用的是向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。)

转载于:https://www.cnblogs.com/schiller-hu/p/8449542.html

你可能感兴趣的文章
用js实现gridview某列自动求和,或某行自动求和
查看>>
C语言获取系统时间的几种方式(转)
查看>>
解决CSS透明度被继承问题
查看>>
关于sublime Text 3安装sublimecodeIntel插件配置方法
查看>>
log4j2配置
查看>>
Mac下终端配置(item2 + oh-my-zsh + solarized配色方案)
查看>>
第十一周学习进度表
查看>>
关于sure 等同根词的演化
查看>>
web服务器分析与设计(四)
查看>>
jenkins 添加 证书凭证Credentials
查看>>
Core Graphics绘图
查看>>
潭州课堂25班:Ph201805201 第二课:数据类型和序列类型 (课堂笔记)
查看>>
centos LNMP第一部分环境搭建 LAMP LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/php/{p.conf.def...
查看>>
python事件调度库sched
查看>>
Android Gradle 配置 [转]
查看>>
TApplicationEvents-OnMessage、OnIdle
查看>>
在论坛中出现的比较难的sql问题:22(触发器专题3)
查看>>
Learn Rails5.2 Routes。( 很少用到的参数:constraints和redirect)
查看>>
1633. 满足条件的字符串
查看>>
转载:mysql数据库密码忘记找回方法
查看>>