2019独角兽企业重金招聘Python工程师标准>>>

BigDecimal
在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者
是工程计算,在商业计算中我们要用 java.math.BigDecimal。BigDecimal一共有4个够造方
法,我们不关心用BigInteger来够造的那两个,那么还有两个,它们是:

BigDecimal(double val)

Translates a double into a BigDecimal.

BigDecimal(String val)

Translates the String repre sentation of a BigDecimal into a
BigDecimal.

上面的API简要描述相当的明确,而且通常情况下,上面的那一个使用起来要方便一些。我
们可能想都不想就用上了,会有什么问题呢?等到出了问题的时候,才发现上面哪个够造方
法的详细说明中有这么一段:

Note: the results of this constructor can be somewhat unpredictable. One might
assume that new BigDecimal(.1) is exactly equal to .1, but it is actually equal
to .1000000000000000055511151231257827021181583404541015625. This is so because
.1 cannot be represented exactly as a double (or, for that matter, as a binary
fraction of any finite length). Thus, the long value that is being passed in to
the constructor is not exactly equal to .1, appearances nonwithstanding.

The (String) constructor, on the other hand, is perfectly predictable: new
BigDecimal(".1") is exactly equal to .1, as one would expect. Therefore, it is
generally recommended that the (String) constructor be used in preference to
this one.

原来我们如果需要精确计算,非要用String来够造BigDecimal不可!在《Effective Java》
一书中的例子是用String来够造BigDecimal的,但是书上却没有强调这一点,这也许是一个
小小的失误吧。

转载于:https://my.oschina.net/u/1455908/blog/356115

关于数据取舍问题的一个实例相关推荐

  1. oracle同一个用户数据隔离,ORACLE一个实例多个用户实现数据隔离

    在数据库只有一个实例的情况下,如果要实现数据的隔离,最简单的方法就是创建多个表空间,添加多个用户,一个用户对应一个表空间,这样就实现了数据的隔离(多个开发团队共用一个oracle实例). 1.ssh ...

  2. 定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件。再声明一个实例dog2,读取文件dog1的状态给dog2。

    定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件.再声明一个实例dog2,通过读取文件dog1的状态赋给dog ...

  3. 萌新的Python练习实例100例(七)将一个列表的数据复制到另一个列表中

    题目: 将一个列表的数据复制到另一个列表中 分析: · 这道题是联系list和切片的使用: 方法1: · 将b的值赋予a: · a[0:3]表示使用切片从0位置开始到第3位置结束: · a[:3]表示 ...

  4. svm对未知数据的分类_LibSVM学习3:一个实例搞定libsvm分类

    转自:[by faruto] 视频的帖子地址: 本讲视频相关帖子:[1]如何使用libsvm进行分类 这帖子就是初步教教刚接触libsvm(svm)的同学如何利用libsvm进行分类预测,关于参数寻优 ...

  5. 使用dplyr进行数据操作(30个实例)

    本文转载自"R语言",已获授权. dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包, ...

  6. docker 主进程 日志_[docker]从一个实例,一窥docker进程管理

    在Docker中,进程管理的基础是Linux内核的PID命名空间技术.在不同的PID命名空间下,可以有相同的PID. Linux内核为所有的PID命名空间维护了一个树状的数据结构,最顶层是系统初始化时 ...

  7. android post json格式,Android中post请求传递json数据给服务端的实例

    在最近的项目中有个需求是这样的: 入参封装成JSON,EXAMPLE: { "uuid": "iamauuid","clientType": ...

  8. 如何将某个groupbox中的数据赋值到另一个groupbox_React中的数据和数据流

    第2章大致介绍了React.我们花了些时间学习了React,了解它的设计和API背后的一些概念,我们甚至还逐步说明了如何用React组件构建一个简单注释框.在第4章中,我们将开始更全面地使用组件并开始 ...

  9. 从一个实例,一窥docker进程管理

    在Docker中,进程管理的基础是Linux内核的PID命名空间技术.在不同的PID命名空间下,可以有相同的PID. Linux内核为所有的PID命名空间维护了一个树状的数据结构,最顶层是系统初始化时 ...

最新文章

  1. php数组包含对象吗,在包含数组的PHP对象上调用方法
  2. Python代码:数字图像处理(DIP)7.1.1图像金字塔example7.1
  3. 计算机网络实验仿真系统设计,计算机网络实验课程仿真系统平台的研究与设计...
  4. CRI陆宵吴:夯实底层,音视频技术未来不远
  5. 一些关于 SAP Spartacus 组件和模块延迟加载的问题和解答
  6. 浅入浅出数据结构(20)——快速排序
  7. 周鸿祎VS马化腾 360VS腾讯工资待遇盘点
  8. Python subprocess.check_output 执行shell命令 返回结果(单次执行shell命令)
  9. STM32之SPI从机DMA例程
  10. mysql数据库加载太慢_使用MySQL数据库很慢
  11. React:组件的生命周期
  12. java对象转json
  13. 打印机显示服务器脱机是什么原因,打印机显示“脱机”的原因和解决办法
  14. c语言case用法注意,switch-case基本用法与注意事项
  15. 计算机打印机删除文件,怎么取消打印机文档|打印机任务无法删除解决方法
  16. java 实现扑克牌洗牌功能
  17. KEIL MDK平台 S3C2440 C语言软件仿真
  18. 虚幻引擎图文笔记:Niagara粒子系统实例 风格化火焰(一)
  19. Windows 7 更新补丁大包子
  20. [转]黄金圣斗士处女座沙加读解

热门文章

  1. 综述丨七场高端报告,带你大视角看人工智能发展
  2. 干货丨【看图识算法】这是你见过最简单的 “算法说明书”
  3. (已解决)module ‘tensorflow‘ has no attribute ‘app‘
  4. 使用python中的库matplotlib绘制箱线图(boxplot)
  5. 卷积神经网络(CNN)数学原理解析
  6. 机器学习漫谈:深度学习的辉煌
  7. 里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白
  8. 贝叶斯网络之父:当前的机器学习其实处于因果关系之梯的最低层级
  9. 中心化,去中心化?关乎互联网未来命运的重要选
  10. 人工智能恶意使用报告:预测、预防和缓解