能买几颗糖??

最近这几天吃“瓜”有点多,这次我们换点糖吃。

01

Q:假设你有1块钱,而糖果五毛钱一颗,你买了一个,还剩多少钱?

A:必须剩五毛。(我们都是幼儿园毕业了的人)

程序实现:

02

Q:又来买糖,兜里装了一块零一分,即(¥1.01),,糖果也涨价了,变成0.56元一个,问买一个之后兜里还剩多少钱?

A:1.01-0.56=0.45(元)(都说了幼儿园毕业了)

程序实现:

WTF!!!什么鬼???

对的,你没看错,程序计算你还有0.449999999996元,为什么会这样???

假如代码欺骗了你,不要悲伤,不要心急,找出bug,解决之!

03

Q:闲着没事儿老想吃糖,又去买糖,这次为了方便计算,就装了一块钱,到了糖果店,货物架上摆着的糖果分别一毛一个,两毛一个,三毛一个······一样买一个的话最多能买几个?

A:都说了劳资是上过幼儿园的,当然从最便宜的买,0.1+0.2+0.3+0.4=1(元)刚好花完回家。

程序实现:

WTF!!!

竟然才买三个,为啥最后钱不够了???

05

摘自网络的一段:

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。 float:2^23 = 8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数: 2*8388608 = 16777216 。有8位有效数字,但绝对能保证的为7位,也即float的精度为7~8位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为16~17位

因此,上面的糖果问题就是double搞的鬼,同样在《effictive java》中,精度丢失也被列为78条规则中的一条,那就是如果对精度要求较高特别是涉及money的时候,一定不要使用float和double。

06

Q:既然不能使用double,那该用什么来解决买糖果的问题?

A:如果数字可能会比较大,可以使用BigDecimal;如果金额较小,确保不会超过int大小的话使用int也可以(单位为分即可)

代码实现如下:

原文发布于微信公众号 - 陌与尘埃(grq100296)

原文发表时间:2018-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

HDU 1847 Good Luck in CET-4 Everybody!(找规律版巴什博奕)

Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和...

38280
来自专栏机器学习AI算法工程

用R语言对城管事件数据分析

作者:夏尔康 https://ask.hellobi.com/blog/xiaerkang/3975 这次使用主成分分析主要目的并不是降维,而是分析城管数据中的...

35690
来自专栏生信宝典

NGS基础 - FASTQ格式解释和质量评估

FASTQ文件格式和命名 高通量测序之后用于下游分析的数据一般存储在FASTQ文件中。为了节省空间,又不影响下游使用,也一般用gzip压缩的格式。 单端测序每个...

46750
来自专栏JackieZheng

Java豆瓣电影爬虫——使用Word2Vec分析电影短评数据

  在上篇实现了电影详情和短评数据的抓取。到目前为止,已经抓了2000多部电影电视以及20000多的短评数据。   数据本身没有规律和价值,需要通过分析提炼成知...

55580
来自专栏量化投资与机器学习

【高能】用PyMC3进行贝叶斯统计分析(代码+实例)

问题类型1:参数估计 真实值是否等于X? 给出数据,对于参数,可能的值的概率分布是多少? 例子1:抛硬币问题 硬币扔了n次,正面朝上是h次。 参数问题 想知道...

1.3K100
来自专栏人工智能LeadAI

python根据BM25实现文本检索

目的 给定一个或多个搜索词,如“高血压 患者”,从已有的若干篇文本中找出最相关的(n篇)文本。 理论知识 文本检索(text retrieve)的常用策略是:用...

1K50
来自专栏大数据智能实战

基于seq2seq的中国对联自动配对技术实践

Sequence to Sequence模型这种基于编码--解码的模型已经被谷歌成功应用于机器翻译上。而理论上任意的序列到序列的有监督问题都可以用这种模型。如...

35980
来自专栏about云

使用Spark MLlib给豆瓣用户推荐电影

问题导读: 1.常用的推荐算法有哪些? 2.推荐系统是什么样的流程? 3.从这个推荐系统我们能学到什么? 推荐算法就是利用用户的一些行为,通过一些数学算法,推测...

93370
来自专栏大数据文摘

妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋

16430
来自专栏数据小魔方

R语言可视化——REmapC(填充地图)

今天跟大家介绍REmap函数家族中的第三个函数——REmapC。 REmapC函数允许我们同时在一张地图上制作填充图和点图、线图。 library(REmap)...

1.7K60

扫码关注云+社区

领取腾讯云代金券