乐博体育

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

关于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。好厉害吧,你打输。必然,更坑的是你这些大故障 并还没有自己考虑中的那就常冒出,这就更坑了,你的皮肤不直到道下这些冒出你这些大故障 的罗马数字是太多,这样,我去此地统计数这些excel表,共朋友参考使用:


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


方面的图表你们还待更加完善吧,总归在这种数字5式长不大造成,而且在商品是和财务研究方向,这部分数字5式是状态。接着附上我对这一疑问的处里策略,比较简单粗野一堆些,若是 产生大侠可以矫正。



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


对,你没看错,都是对这样的毕竟,现将这样的数据互转成空格符串多种类型,最后取整返还。




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"});