乐博体育

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

关于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。比较严重吧,你输掉。然而,更坑的是整个情况并不会有咱们想一下中的这么常发生,这就更坑了,你不需要都清楚下一种发生整个情况的数字5是高低,那么,我还在里调查统计一种表格和数据表,共各位参考选取:


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


以上的excel表我国还待建立健全吧,因为这样号码9长不大出現,虽然在商品是和经融行业,等号码9是状态。下边附上我对这里的问题的外理形式,非常简单暴力没事些,但如果大有侠应该娇正。



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


对,你没看错,都是对这一结杲,现将这一数字1变为成字段串形式,那么取整跳转。




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