程序中算钱不能用浮点类型是个什么坑?
先来考考大家,在下列 Java 代码中,你觉得在控制台会打印什么值呢?
貌似难不倒大家,这不是 so easy ,连小学生都会算的题目,1.0 - 0.9 = 0.1 啊,但是你觉得会等于 0.1 吗?
看下上图代码的输出结果:
有没有惊讶,有没有很刺激,0.0……02 难道被计算机吃掉了???
好吧,当初我也是这幅表情(原谅我基础薄弱)。
那如果我们将其换成 float 类型的会怎么样呢?再来试试。
控制台打印结果:
结果居然多了 0.10…24,那不得乐开花啊~
那么以上这些现象是为什么呢?
浮点数在计算机中采用二进制表示,而二进制系统无法精确表示某些小数,比如 1/10 ,就像十进制无法表示 1/3 一样,这样是产生误差的原因。
在企业开发中,当涉及到钱的计算时应该使用 BigDecimal 类型来处理,尤其是在金融领域,只要和钱有关的任何逻辑,都是大事,反之没那么严重(只是没那么大)。
·END·
程序员的成长之路
路虽远,行则必至

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python 爬取吴亦凡的 10 万转发数据,扒一扒流量的真假!
由于时间点也挺凑巧,刚好赶在蔡徐坤发律师函给哔哩哔哩之后,不禁让大家对他们进行一番对比。同为我们印象中的流量明星,吴亦凡跟蔡徐坤之间有什么不一样吗?大伙儿是怎么看待他们的?又是怎么看待《大碗宽面》这首歌的呢? 我们通过微博移动端随机抓取了吴亦凡发布新歌《大碗宽面》的微博转发数据10万条(时间节点2019年4月20日01时)。该微博于2019年4月19日10时发布,到4月20日01时已被转发超过36万。 吴亦凡该微博的转发是否存在假流量? 当然,关注我的朋友们估计最关心的问题是,吴亦凡的微博转发是否像蔡徐坤一样,有很多都是假流量? 我们先从粉丝性别比例入手。我们统计了102118条转发数据中,有77279条是女性转发的,占75.7%,其余24839条是男性转发的,占24.3%。这是一个比较合理的比例。 我们随机抽取了男性的转发,发现这里的男粉丝几乎都是有简介、微博粉丝数、关注数都大于50的真粉丝。 咦,不是说吴亦凡是流量明星吗?难道很多假流量都存在于女性的转发里?我们又随机抽取了女性转发的数据,发现,这里面的女性粉丝几乎也都是有简介、微博粉丝数、关注数都大于50的真粉丝。 我们就更奇怪了...
- 下一篇
2018-01-19 Xtext试用: 5步实现一个(中文)JVM语言
续上文Xtext试用: 快速实现简单领域专用语言(DSL). 基于官方教程: Five simple steps to your JVM language 达成如下语言: 它被Quan6JvmModelInferrer中的转换生成Java源代码(与上文中的代码生成不同的是, 不需要写出具体Java语法). 项目源码在: program-in-chinese/xtext_tutorial_15_min_zh, 只包含了语法规则所在项目. 其他项目(.ide, .tests, .ui.tests等等, 也不知何用)未提交. 测试项目(包括上图的代码)在: program-in-chinese/xtext_tutorial_15_min_zh 由于本人创建的项目名称与教程不同(com.program_in_chinese.quan6), 运行后打开DSL源码文件时报错: An internal error occurred during: "XtextReconcilerJob". java.lang.IllegalArgumentException: Domainmodel.importS...
相关文章
文章评论
共有0条评论来说两句吧...