作者BloodyDawn (血色曙光)
看板PHP
标题[请益] 请问(int) ((0.1 + 0.7) * 10)为什麽是7
时间Thu May 17 17:54:20 2012
大家好~今天看书上写了这个范例让我满纳闷的
PHP Code :
echo (int) ((0.1 + 0.7) * 10);
正常情况下看到应该会印出8,但书上写的答案是7
我也用
http://writecodeonline.com/php/这个网站试了一下确实是印出7
书上的说法是在这边最後计算的结果是7.999999再转换成8
但遇到将型态转成整数就会变成了7
那这边有两个问题:
1.我把0.7换成0.1~0.9但就只有0.7会有这个问题,请问是为什麽呢?
2.为什麽在这里的计算结果会变成了7.999999呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.63.50.193
1F:推 LaPass:二进位误差.... 05/17 17:55
2F:→ LaPass:PHP算出来会这样喔?我都没注意过.... = =" 05/17 17:56
3F:推 kusoayan:没注意过+1 … XD 05/17 19:45
4F:推 bibo9901:真妙 你把(int)拿掉就变8了 XD 05/17 20:27
5F:推 shadowjohn:这实在太可怕了 05/17 21:51
7F:→ LPH66:这时候就要推这篇了 05/17 22:36
8F:→ chunhsiang:浮点数是存在误差 对於数值的概念是类似逼近某数 05/17 23:04
9F:→ chunhsiang:像极限 除不进的数就取决於你记忆体花多少他就有多进 05/17 23:06
10F:→ chunhsiang:下转int 如果x没有大於等於八 不管怎麽逼近 他都是7 05/17 23:09
11F:→ chunhsiang:所以在程式守则有两项关於的规定... 05/17 23:11
12F:→ Canboo:看到这个问题就想到当初处理比价网站的平均售价... 05/18 16:03