乐博体育

乐博体育>新闻动态>尚途学院

关于PHP浮点数转换成整型时的坑

起源://chixintf.com/ 著者:admin 查询时长:3019次 颁布时期:2018-12-19 08:47:05 收藏:添加收藏

吐槽一个php开发过程中的坑,心中愤恨啊。

    $fund = 1232.86;    
    $intFund = intval($fund*100);
    
    if($intFund == 123286){
        return TRUE;
    }else{
        return FALSE;
    }


我希望众多设计者跟我预想的相同,在这个必定会取到TRUE,对吧。不过实际情况却就不是,在这个调用的成果是FALSE。当1232.86乘上100,这得见的结杲体现 出现的是123286,这样不是有一个浮点数,这样用这结杲与123286实施很,她俩是不是完全相同的。这样想将这结杲转化成成美容,即用intval处置一点,得见的结杲就变成123285了,鉴于这浮点数在手机内存中,是123285.9999999999。强势吧,你赢后。其实,更坑的是这是方面并并没有自己思考一下中的那就常发生,这就更坑了,你不需要了解下一位发生这是方面的号码是几多,之所以,你在里测算一位表格和数据表,共用户 参考选取:


浮点数与整数相乘后的结果预期结果
0.58intval(0.58*100)=5758
19.99intval(19.99*100) = 19981999
1232.86intval(1232.86*100) = 123285123286


之前的工作表格我还待逐步完善吧,必竟此类号码不生长存在,不过在各种商品和财经这些领域,等号码是状态。上面附上我对这些大问题的外理方法,简单化粗爆好几回些,若是大侠应该较正。



function intvals($numbers){
  if(!is_numeric($numbers))return 0;
  return intval(strval($numbers));
}


对,你没看错,也就是对这款毕竟,现将这款数字8切改成字节串结构类型,随后取整调用。




var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?90c4d9819bca8c9bf01e7898dd269864"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); !function(p){"use strict";!function(t){var s=window,e=document,i=p,c="".concat("https:"===e.location.protocol?"https://":"http://","sdk.51.la/js-sdk-pro.min.js"),n=e.createElement("script"),r=e.getElementsByTagName("script")[0];n.type="text/javascript",n.setAttribute("charset","UTF-8"),n.async=!0,n.src=c,n.id="LA_COLLECT",i.d=n;var o=function(){s.LA.ids.push(i)};s.LA?s.LA.ids&&o():(s.LA=p,s.LA.ids=[],o()),r.parentNode.insertBefore(n,r)}()}({id:"K9y7iMpaU8NS42Fm",ck:"K9y7iMpaU8NS42Fm"});