php浮点精度处理

有理想的草根 2007-03-16 05:56:52
因为PHP是非预定义类型语言,所以在PHP4的时候,对于小数点会出现精度,问题是怎么去处理呢?
$L=142.88;
if(100.15+32.549+10.181==$L){
echo (100.15+32.549+10.181) - $L;
echo "true";
}else{
echo (100.15"+32.549+10.181) - $L;
echo "false";
}
要求:
1,不能使用round方法。
2,不能使用bcmath的方法。
应该如何处理?
...全文
977 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloyou0 2007-03-26
  • 打赏
  • 举报
回复
浮点数比较不要用==,要用< && >
各种语言都是如此。
sjrh 2007-03-25
  • 打赏
  • 举报
回复
感觉这类对浮点数的研究在php中没多大用
有理想的草根 2007-03-23
  • 打赏
  • 举报
回复
确认对于可能产生浮点数的变量,在知道使用精度的时候。
采用*100或*1000的方法更好些。
xuzuning 2007-03-19
  • 打赏
  • 举报
回复
if(abs(100.15+32.549+10.181) - $L < 5e-10){
有理想的草根 2007-03-19
  • 打赏
  • 举报
回复
自已顶,再回二楼同志的信息。
我的例子,环境是:PHP4.3.11,WINXP下运行的,返回的是FALSE。
测试很多遍没法子乾地精确比对,所以出错。
希望大家能够帮我解决。
懒得去死 2007-03-17
  • 打赏
  • 举报
回复
必须首先知道变量的值才可以匹配.我觉得
whalefish2001 2007-03-17
  • 打赏
  • 举报
回复
首先要明白,浮点数是不可能精确匹配的。

例如我要匹配

for($i=1;$i<=300;$i++)
{
$a += 1/7;
}
if($a == 300/7)
{
print("Same");
}
else
{
print("no ");
}
echo $a;

但是,每种语言的精度都是有限的,php也不例外。都会有一个最大精度范围,只要不出php的这个范围就不会出问题。
楼主的例子应该不会出现问题吧,
但是我这个例子就不行了。
除非把300改为3,就可以。


21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧