[ Python ] print(0.3 == (3 * 0.1)) ->False why?

2018-06-14 15:11:40 +08:00
 Leigg

转换为:
3*0.1 = 0.30000000000000004
为啥捏?

8697 次点击
所在节点    Python
45 条回复
Leigg
2018-06-14 21:54:34 +08:00
@Raymon111111 哥们,我不反驳你,但你这句话对我说真没什么意思。科班不科班出身对一个人确实有不小的影响,但这点影响从长远来看真算不了什么,一个人他 /她行结果就一定不会差,但倘若他 /她不行富二代最终也是个只会吃喝玩的废物。
mingyun
2018-06-14 21:54:41 +08:00
不少语言这样的
a22271001
2018-06-14 21:59:34 +08:00
@ihancheng 这个跟离散数学有什么关系?
andylsr
2018-06-14 22:07:59 +08:00
@jmc891205 永远不要用浮点数┑( ̄Д  ̄)┍
Leigg
2018-06-14 22:19:36 +08:00
@cuzfinal nice !
iceheart
2018-06-14 22:28:26 +08:00
不是每个编程语言都这样的。
qile1
2018-06-14 22:54:16 +08:00
@andylsr 那是不是如果保留两位就 if int ( 0.3*100 )==int ( 3*0.1*100 ):
andylsr
2018-06-14 23:01:14 +08:00
@qile1 这个题~这么搞其实没啥意思啦~类型转换总能带来意想不到的 bug~反正说自己实际应用中能不用就不用~~
yanhejihe
2018-06-14 23:27:02 +08:00
从 Java 就被虐过,还好 Java 有 bigdecimal 可以用。
incompatible
2018-06-15 00:22:47 +08:00
@ihancheng 你确定你学过离散数学?这跟离散数学有什么关系??
lonccc
2018-06-15 00:44:52 +08:00
@Leigg 是的,科班出身不能决定什么,搜索和学习能力可能更重要。楼主还是应该想想为啥自己不知道咋搜呢。这个问题对于大一正常上过 c 语言的人来说应该都遇到过吧,不说知道具体原因,但也知道浮点数精度有限,不能用等于来判断,所以也怪不得大家语气不善了。
ericls
2018-06-15 00:53:20 +08:00
不对吧 print 应该返回 None 才对
ericls
2018-06-15 00:56:57 +08:00
@Raymon111111 不同意 最多从概率上来讲 科班出身的懂这个的可能性大

重要的是学不学 而不是在哪里学

Disclaimer: 我是非科班出生
dangyuluo
2018-06-15 01:22:13 +08:00
以后遇到这种问题,去看一下这个变量的内存,你就知道咋回事了
ufjfeng
2018-06-15 01:35:19 +08:00
用 numpy.isclose() 或者自己写一个 isclose() 吧

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.isclose.html
techmale
2018-06-15 07:41:56 +08:00
RTFM
Rationalman
2018-06-15 08:17:58 +08:00
这两天在看 python 核心编程看到了,是浮点数在计算机中的存储无法精确的问题,了解一下 decimal。我是初学者。
guog
2018-06-15 08:25:29 +08:00
浮点运算请使用 decimal
littleshy
2018-06-15 08:38:25 +08:00
现在学编程都不用学计算机基础?
xiaojunjor
2018-06-15 08:51:39 +08:00
月经贴
基础差,不会百度
没救

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/463105

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX