喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
 12  1/2  1  2  > 
     
标题: [问题] 神啊救救我吧为什么0.5+0.3+0.2=1 0.6+0.3+0.1=1但结果却不一样?  
 
carpenter (carpenter)
金牌会员
Rank: 6Rank: 6
高级会员



UID 15303
精华 0
积分 1093
帖子 1074
金钱 1093 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2002-7-17
来自 辽宁
状态 离线
[广告]: q m
神啊救救我吧为什么0.5+0.3+0.2=1 0.6+0.3+0.1=1但结果却不一样?



<?
$a
=0.6;
$b=0.3;
$c=0.1;
$d=$a+$b+$c;                
echo 
$d.'<br>';        
if(
$d!=1)
{
echo 
$d.'<br>';
}        
?>
输出
1
1
=======

<?
$a
=0.5;
$b=0.3;
$c=0.2;
$d=$a+$b+$c;                
echo 
$d.'<br>';        
if(
$d!=1)
{
echo 
$d.'<br>';
}        
?>
输出
1
2008-4-11 12:32 PM#1
查看资料  Blog  发短消息  QQ  顶部
 
wzhu (wzhu)
版主
Rank: 7Rank: 7Rank: 7
C[A-Z]O


UID 68040
精华 0
积分 74222
帖子 1611
金钱 74164 喜悦币
威望 0
人脉 58
阅读权限 100
注册 2006-1-14
来自 湖北荆州>陕西西安>辽宁 ...
状态 离线
[推荐阅读] 请教问题PHP + SWF
float(1) !== int(1)



<?wzhu
wzhu.print("http://www.cncmm.com");
?>
2008-4-11 12:38 PM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
carpenter (carpenter)
金牌会员
Rank: 6Rank: 6
高级会员



UID 15303
精华 0
积分 1093
帖子 1074
金钱 1093 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2002-7-17
来自 辽宁
状态 离线
[推荐阅读] 在PHP中调用mysql存储过程为何不显示结果集
为什么两段结果不一样啊
还有

if($d!=(float)1)写结果一样
if($d!==(float)1)写结果

我应该怎么写啊

[ 本帖最后由 carpenter 于 2008-4-11 12:44 PM 编辑 ]
2008-4-11 12:42 PM#3
查看资料  Blog  发短消息  QQ  顶部
 
carpenter (carpenter)
金牌会员
Rank: 6Rank: 6
高级会员



UID 15303
精华 0
积分 1093
帖子 1074
金钱 1093 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2002-7-17
来自 辽宁
状态 离线
[推荐阅读] 赛美特传媒急招PHP工程师,待遇从优!
非常感谢wzhu的回复
不过麻烦您测试一下
$a=0.6;
$b=0.3;
$c=0.1;

$a=0.5;
$b=0.3;
$c=0.2;
的结果绝对不一样。
2008-4-11 12:50 PM#4
查看资料  Blog  发短消息  QQ  顶部
 
wzhu (wzhu)
版主
Rank: 7Rank: 7Rank: 7
C[A-Z]O


UID 68040
精华 0
积分 74222
帖子 1611
金钱 74164 喜悦币
威望 0
人脉 58
阅读权限 100
注册 2006-1-14
来自 湖北荆州>陕西西安>辽宁 ...
状态 离线
[推荐阅读] 请教一个高效update的问题
$a=0.6;
$b=0.3;
$c=0.1;

$a +$b+$c !== 1



$a=0.5;
$b=0.3;
$c=0.2;
$a +$b+$c !== 1




<?wzhu
wzhu.print("http://www.cncmm.com");
?>
2008-4-11 01:17 PM#5
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
goldpeanut (goldpeanut)
注册会员
Rank: 2
中级会员



UID 22410
精华 0
积分 168
帖子 168
金钱 168 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-8-12
状态 离线
[推荐阅读] 哎。。貌似下面文章就天涯让发。其他mop都删帖了。。
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
(摘自手册)
2008-4-11 01:21 PM#6
查看资料  发短消息  QQ  Yahoo!  顶部
 
carpenter (carpenter)
金牌会员
Rank: 6Rank: 6
高级会员



UID 15303
精华 0
积分 1093
帖子 1074
金钱 1093 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2002-7-17
来自 辽宁
状态 离线
[推荐阅读] 网上购物安全无忧,一切就在强的信用卡服务~~
试试这个就知道了

<?
$a
=0.6;
$b=0.3;
$c=0.1;
$d=$a+$b+$c;
$e=0.5;
$f=0.3;
$g=0.2;
$h=$e+$f+$g;                
echo 
var_dump($d).'<br>';        
echo 
var_dump($h).'<br>';    
if(
$d==$h)
{
echo 
'd==h'.'<br>';
}
if(
$d===$h)
{
echo 
'd===h'.'<br>';
}
if(
$d!=$h)
{
echo 
'd!=h'.'<br>';
}
if(
$d!==$h)
{
echo 
'd!==h'.'<br>';
}
if(
$d==1)
{
echo 
'd==1'.'<br>';
}
if(
$d===1)
{
echo 
'd===1'.'<br>';
}
if(
$d!=1)
{
echo 
'd!=1'.'<br>';
}
if(
$d!==1)
{
echo 
'd!==1'.'<br>';
}
if(
$h==1)
{
echo 
'h==1'.'<br>';
}
if(
$h===1)
{
echo 
'h===1'.'<br>';
}
if(
$h!=1)
{
echo 
'h!=1'.'<br>';
}
if(
$h!==1)
{
echo 
'h!==1'.'<br>';
}
?>
float(1)
float(1)
d!=h
d!==h
d!=1
d!==1
h==1
h!==1
2008-4-11 01:34 PM#7
查看资料  Blog  发短消息  QQ  顶部
 
福网quain
新手上路
Rank: 1



UID 118501
精华 0
积分 5
帖子 5
金钱 5 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2008-4-10
状态 离线
[推荐阅读] 国际虚拟信用卡,你拥有了吗???


QUOTE:
原帖由 goldpeanut 于 2008-4-11 01:21 PM 发表
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
(摘自手册)
是这样的啊!




CN5角
2008-4-11 01:40 PM#8
查看资料  发短消息  顶部
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 743
帖子 522
金钱 743 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
[推荐阅读] 在线急等!!
因为计算机内部处理都是二进制,
下面的实验很有趣:

<?php
$t1 
0.1+0.1+0.4;
$t2 0.3+0.1+0.2;
echo 
$t1==$t2?"$t1==$t2":"$t1<>$t2";
echo 
'<br />';
$t1 0.2+0.1+0.4;
$t2 0.3+0.2+0.2;
echo 
$t1==$t2?"$t1==$t2":"$t1<>$t2";
?>




Blogger 免费搭建的个人BLOG
2008-4-11 01:47 PM#9
查看资料  Blog  发短消息  顶部
 
中文
新手上路
Rank: 1



UID 116629
精华 0
积分 27
帖子 26
金钱 26 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2008-3-28
状态 离线
[推荐阅读] WOW封号问题,建议购买国际信用卡
浮点数精度
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。

这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。




中文名字居然没人用
2008-4-11 01:51 PM#10
查看资料  发短消息  顶部
 12  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.141227 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP