程序中算钱不能用浮点类型是个什么坑?

阅读本文大概需要 1 分钟。

先来考考大家,在下列 Java 代码中,你觉得在控制台会打印什么值呢?

貌似难不倒大家,这不是 so easy ,连小学生都会算的题目,1.0 - 0.9 = 0.1 啊,但是你觉得会等于 0.1 吗?

看下上图代码的输出结果:

有没有惊讶,有没有很刺激,0.0……02 难道被计算机吃掉了???

好吧,当初我也是这幅表情(原谅我基础薄弱)。

那如果我们将其换成 float 类型的会怎么样呢?再来试试。

控制台打印结果:

结果居然多了 0.10…24,那不得乐开花啊~

那么以上这些现象是为什么呢?

浮点数在计算机中采用二进制表示,而二进制系统无法精确表示某些小数,比如 1/10 ,就像十进制无法表示 1/3 一样,这样是产生误差的原因。

在企业开发中,当涉及到钱的计算时应该使用 BigDecimal 类型来处理,尤其是在金融领域,只要和钱有关的任何逻辑,都是大事,反之没那么严重(只是没那么大)。


·END·

程序员的成长之路

路虽远,行则必至

本文原发于 同名微信公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。


#微信##笔试题目##面经##秋招#
全部评论
钱都直接用int和long类型就好了
点赞 回复 分享
发布于 2019-04-26 12:39

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10583次浏览 93人参与
# 你的实习产出是真实的还是包装的? #
1855次浏览 42人参与
# 巨人网络春招 #
11331次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7571次浏览 43人参与
# 简历第一个项目做什么 #
31669次浏览 336人参与
# 重来一次,我还会选择这个专业吗 #
433453次浏览 3926人参与
# 米连集团26产品管培生项目 #
5954次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187114次浏览 1122人参与
# 牛客AI文生图 #
21423次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152357次浏览 888人参与
# 研究所笔面经互助 #
118900次浏览 577人参与
# 简历中的项目经历要怎么写? #
310233次浏览 4212人参与
# AI时代,哪些岗位最容易被淘汰 #
63650次浏览 823人参与
# 面试紧张时你会有什么表现? #
30506次浏览 188人参与
# 你今年的平均薪资是多少? #
213079次浏览 1039人参与
# 你怎么看待AI面试 #
180040次浏览 1255人参与
# 高学历就一定能找到好工作吗? #
64325次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76490次浏览 374人参与
# 我的求职精神状态 #
448050次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363390次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160641次浏览 1111人参与
# 校招笔试 #
470914次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务