五好的Book

永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

今天碰到一个奇葩的事情:

用户有书币888 看一本刚好需要 8.88元的书
然而看不了,提示需要充值。怎么能这么不要脸呢,明显可以看阿,这不科学阿,然而这却是真实的,测试居然真和用户反馈一样,不是说好的PHP是弱类型语言吗?

现在把过程写一下:

   $a=把钱转书币  8.88*100
   $b=账户余额 888

比较$a和$b 的大小

if($b>=$a){可以看}else{不可以看,跳充值页面}

奇葩的是 这里 会跳到{不可以看,跳充值页面} 这里的代码块。这里为什么会出现这种情况呢?
其他过程不说了, 就列出关键的判断
var_dump($b) 和 var_dump($a) 分别打印出来 就知道为什么了。

结果为:int(888) float(888) 

这里的解决办法是 把 float 转成int

$a=intval($a);

这样问题就解决了。
再看看 PHP 的 float 的文档 https://www.php.net/manual/zh/language.types.float.php
真是学艺不精阿。

本原创文章未经允许不得转载 | 当前页面:五好的Book » 永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

评论 2

文章评论已关闭!

  1. It is very nice to read your site, thank you very much for your work, it's great!

    MartinNeile 2020-06-22    
  2. nice啊,好好,又涨知识了。

    nery 2020-05-26