大家好,又见面了,我是你们的朋友全栈君。...stock_number tinyint(1) 如果stock_number此时的值是127,当库存+1的时候,就会超过int的最大范围(error: Data truncation: Out of...2147483647 4 bigint -9223372036854775808 9223372036854775807 8 1 bytes = 8 bit ,一个字节最多可以代表的数据长度是...2的8次方 11111111 在计算机中也就是 -128到127 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
没啥区别,一般用(int),另外还有 float, string, array 等 intval()而言,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。...如果参数是符点数,则返回他取整之后的值。...例:intval(“A”)=0; intval(12.3223)=12; intval(“1123Asdfka3243”)=1123; $a=0.99; $b=(int)$a; //$b=0; $
1.floor — 舍去法取整 floor ($value ) 返回不大于 value 的下一个整数,将 value 的小数部分舍去取整。...echo floor(4.3);// 4 echo floor(3.999);//3 2.ceil — 进一法取整 ceil ( $value ) 返回不小于 value 的下一个整数,value 如果有小数部分则进一位...echo ceil(4.3);//5 echo ceil(3.9999);//4 3、round — 四舍五入取整 以小数点分界 echo round(4.3);//4 echo round(3.999
前言 ---- PHP本身并没有在指定范围内生成随机小数的函数, 但是这种场景会在很多地方用到 只能我们自己去实现这种算法, 本文记录使用PHP生成在指定范围内的随机小数算法几种方法 方案一:mt_rand...() / mt_getrandmax() ---- /** * 生成随机小数 */ function randFloat($min, $max) { if ($min >= $max) { throw
在 PHP 中,进行类型转换一般可以使用 intval(var) 函数,或者使用强制类型转换函数 (int)var 使用上这两个没有什么区别,唯一比较大的区别是 intval(var) 函数支持第二个参数...base 转化所使用的进制,但是一般使用过程中,这个参数用的很少。...但是在性能上,这两种方法有非常大的差别,经过测试,在 PHP 中使用 (int)var 进行类型转换时要比使用函数 intval(var) 大概快 3-6.5倍,下面是一个简单的测试: # 输入 (int...)$val intval($val) 比较 #0 42 0.068180 0.448819 658% #1 -42 0.067972 0.448907 660% #2 4.2 0.072348 0.450288...的 intval(), strval(), floatval() 和 boolval() 来自 PHP 4 年代的函数,PHP 5 之后的版本有了强制类型转换函数(比如(int) $var),经过上面测试
浮点数运算的“锅” //加 $a = 0.1; $b = 0.7; $c = intval(($a + $b) * 10); echo $c."..."; //输出:6 上面的结果,显然不是我们想要的! PHP 官方手册解释如下: 浮点数的精度有限。...这里的关键在于,浮点数的小数用二进制的表示,转换过程如下: 将小数乘以2,取整数部分表示第一位; 将小数部分乘以2,取整数部分表示第二位; 再将小数部分乘以2,取整数部分表示第三位; ......我们会得到一个无限循环的二进制小数: 0.1001010001... 小数部分出现循环,有限的二进制位无法准确的表示一个小数,这也就是小数运算出现误差的原因。 接下来给大家介绍 任意精度数学函数。...浮点数存在误差,当我们使用精度敏感的数据时,应该使用定点数(decimal)进行存储。 小结 通过浮点数精度的问题,了解到浮点数的小数用二进制的表示。
ceil------增一法取整 返回的类型也是float,如果正数的话,只要有有效小数部分(非0)就增一,5.1返回6,负数就输出比value大一的下一个值,-1.1或者-1.9取整都是-1 的下一个整数 浮点数四舍五入round 语法round($val[, int precision]),$val需要进行四舍五入的浮点数,或者赋值为浮点的变量,[, int precision]保留小数点几位数...省略保留的位数,默认不保留小数部分。 的intval和floor除了返回值一个int一个floor,没有其他区别,5.1-5.99都返回值5; 对于负数的返回值intval直接舍弃小数点后的部分,-5.8...php var_dump(intval(-5.1));//返回 int类型5 echo ""; var_dump(floor(-5.1));//返回float,小于-5.1的值-6
PHP手册里有一句话:永远不要比较两个浮点数是否相等。 计算机内部处理浮点数的方式决定了浮点数不可能100%的精确,所以在处理浮点数运算时会出现精度损失问题。...> 第一条输出语句:在PHP4下输出$c可能是41.120000000001,或类似的结果,后面的1就属于精度损失的部分。...在PHP5中对这个问题做了些“优化”,输出结果中不会显示不精确的部分,但同时也会让我们忽视这个问题,以为$c==41.12。 第二条输出语句:在PHP4和PHP5中都会输出false。...声明一点:这不是PHP的问题,而是计算机内部处理浮点数的问题!在C/JAVA中也会遇到同样的问题。...so..我们只能在我们要的精度范围内比较(比如上面的示例,我们只需要比较$c在小数点后两位内等于41.12即可)。 下面是PHP手册评论中的示例 [php] view plaincopyprint?
float ceil(float value)ceil返回不小于value的最小整数,返回值仍是float型 int intval ( mixed value [, int base]) intval...用于获取变量的整数值,通过进制转换(默认为十进制),返回变量的整型值 intval返回一个整数,接受2个参数,第一个是数或者包含数的字符串,第二个参数是第一个参数使用的进制,除非第一个参数是字符串,否则第二个参数没有作用...,参数中如果有小数,小数部分将被截断 php echo intval(42); // 42 echo intval(4.2); // 4 echo intval(’42’); // 42 echo intval(‘+42’); // 42...> ceil(x)接受一个浮点数x,返回比x大的最小整数 ceil(3.21) = 4 ceil(9.0) = 9 ceil(-2.333) = 2 inval(123.999) = 123 inval
num[]=1; Web90 这道题目是intval( )函数的使用,还是看下这个函数的官方文档吧: intval ( mixed var [, int base = 10 ] ) : int#Note...} } 这个什么都没有过滤,可以用+法,小数,八进制,十六进制都行……....010574进行绕过 Web94 这道题又改回了 $num===”4476” ,这样把小数给放出来了,这样应该是考我们小数.?...当然用计算的方式也行,比如4476+0 Web95 这一个题目的问题主要产生在 strpos ()这个函数上,可以看到这个函数必须含有0,同时弱类型匹配过滤了运算,下面又进一步过滤了小数点,16进制,还是使用八进制的...搜索字母的字符是大小写敏感的。 第二层一个弱比较,strrev()函数是反转字符串,intval()函数通过使用指定的进制 base 转换,返回变量 var 的 integer 数值。
如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug...所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用。 例子 php $f = 0.58; var_dump(intval($f * 100)); //为啥输出57?> 为啥输出是57啊? PHP的bug么? ...* 100的具体浮点数乘法, 我们不考虑那么细, 有兴趣的可以看(Floating point), 我们就模糊的以心算来看… 0.58 * 100 = 57.999999999 那你intval一下...可见, 这个问题的关键点就是: “你看似有穷的小数, 在计算机的二进制表示里却是无穷的” so, 不要再以为这是PHP的bug了, 这就是这样的…..
而浮点数,则由于小数点的存在,在存储时更为复杂,所以就会经常出现这类精度丢失的问题。 但是很多人会很奇怪,在 PHP 中直接执行 1.1+2.2 的结果是正确的呀,好像并不存在这种精度丢失的问题。...$a = 0.58; echo $a * 100, PHP_EOL; // 58 echo intval($a * 100), PHP_EOL; // 57 echo (int) ($a * 100)..., PHP_EOL; // 57 echo intval(bcmul($a, 100)), PHP_EOL; // 58 我们定义了一个变量 $a ,它的内容是 0.58 。...5), PHP_EOL; // 1 bccomp() 函数就是用来根据小数点位数进行精度比较的函数。..., 2, 2), PHP_EOL; // 1.000000000000000000000000000000 bcscale() 是在全局设置小数点的位数。
php $f = 0.58; var_dump(intval($f * 100)); //为啥输出57 ?...符号位:最高位表示数据的正负,0表示正数,1表示负数。 指数位:表示数据以2为底的幂,指数采用偏移码表示 尾数:表示数据小数点后的有效数字....这里的关键点就在于, 小数在二进制的表示, 关于小数如何用二进制表示, 大家可以百度一下, 我这里就不再赘述, 我们关键的要了解, 0.58 对于二进制表示来说, 是无限长的值(下面的数字省掉了隐含的1..., 我们不考虑那么细, 有兴趣的可以看(Floating point), 我们就模糊的以心算来看… 0.58 * 100 = 57.999999999 那你intval一下, 自然就是57了…....可见, 这个问题的关键点就是: “你看似有穷的小数, 在计算机的二进制表示里却是无穷的” 另外举例辅助理解: 十进制数字 8,用二进制表示为 1000 可以理解为 1*2^3+0*2^2+0*2^1+0
php去除小数点后多余0的方法 1、使用“小数+0”。 2、用“floatval(小数)”。 3、用“rtrim(rtrim(小数,'0'),'.')”。 <?...正则表达式说明: /0+$/ 去掉末尾多余的0 /[.]$/ 去掉末尾的. echo preg_replace('/[.]$/', '', preg_replace('/0+$/', '', '100.00...> 以上就是php去除小数点后多余0的方法,希望对大家有所帮助。
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。...解法1 1.数组排序,使用自定义排序规则是 a.b>b.a a 和 b互换位置 2.usort函数的使用 function costomcomp(a,b) return a.b > b.a usort...php function customComp($a,$b){ return intval($a.''.$b) > intval($b.''..../解法1:自定义排序 function PrintMinNumber($numbers) { usort($numbers,'customComp'); return intval...$arr[$j])>intval($arr[$j].''.
PHP面试中, 经常会被问到的一个问题 php $f = 0.58; var_dump(intval($f * 100)); ?...代码中的intval改为floor后,输出的结果也是57 名字解释 BC是Binary Calculator的缩写, 二进制计算器 Sign 符号 Exponent 指数 Fraction 小数 IEEE...,一直到商为0,并且逆序排列所得的余数; 小数部分乘以2取整数部分,然后再用新的小数部分乘以二,取整数,一直到新的小数部分为0, 或者达到了要求的精度为止, 并且顺序排列所得的整数部分。...1/2 1 0 10的二进制表示为1010 小数部分0.625, 乘以2, 取整数部分,新的小数部分继续乘以2, 直到新的小数部分为0或者达到一定精度,再顺序排列每一步得到整数部分。...其中 i为54 和 55 时, PHP给了提示,并且输出结果和i=53时是一样的,最大支持小数点后53个小数。
浮点数精度问题 下面的代码都是PHP代码,Python的浮点数精度问题可以使用下面同样的方法解决 $i = 0.58; echo intval($i*100); // 输出结果 57 ?...为啥输出了57 针对这个问题,逛了鸟哥的博客。(PHP浮点数的一个常见问题的解答) 主要需要理解的就是在计算机中浮点数转成二进制时是无限长的值。...符号位:最高位表示数据的正负,0表示正数,1表示负数。 指数位:表示数据以2为底的幂,指数采用偏移码表示 尾数:表示数据小数点后的有效数字。...0.57999999999999996*100=57.999999999999996,再使用intval()自然就是57了。...看似有穷的小数在计算机的二进制表示里实际上是无穷的。 解决方案 使用round()函数 $i = 0.58; echo round($i*100); // 输出结果 58
PHP常用函数 strpos("1","2")在1中查找二并返回索引或false str_replace("1","2","3")在3中找1并替换为2 define()定义大小写不敏感的常量 !...>"; array() count() 函数用于返回数组的长度(元素数 htmlspecialchars() 函数把特殊字符转换为 HTML 实体 (通过 PHP trim() 函数)去除用户输入数据中不必要的字符...(多余的空格、制表符、换行) (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\) 这些超全局变量是: $GLOBALS $_SERVER $_REQUEST...php中所有用户自定义的函数类和关键词(if else echo)不区分大小写但是变量大小写敏感php is_numeric()绕过 [判断是否为数字或数字字符串]用url编码中的空字符%00或%20进行绕过...; } if(intval($n,0)){//第二个参数是转换为几进制,如果为零则按照第一个参数进行输出 //有intval()可传入小数 echo $flag;
不知大家在开发过程中有没有常常会遇到数据精度问题呢,类似下面这样的: php $a = 0.57; echo intval(floatval($a) * 100); 预期输出结果57,实则56。...结果可能有点出乎你的意外。 那就会有个疑问?为啥实际输出与预期会存在不同呢?这是PHP语言的bug么? ?...看来问题的关键点就在于:小数的二进制表示可能是个无限循环小数。...,小数部分不可能为0.有效位的小数用二进制表示却是无穷的。...那这样*100之后,再intval一下, 自然就是56了….
$f = 0.57; echo intval($f * 100); //56 结果可能有点出乎你的意外,PHP遵循IEEE 754双精度: 浮点数, 以64位的双精度, 采用1位符号位(E), 11指数位...符号位:最高位表示数据的正负,0表示正数,1表示负数。 指数位:表示数据以2为底的幂,指数采用偏移码表示 尾数:表示数据小数点后的有效数字....再来看看小数用二进制怎么表示: 乘2取整,顺序排列,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分,但是像0.57这样的小数像这样一直乘下去...,小数部分不可能为0.有效位的小数用二进制表示却是无穷的。...不难看出上面意外的结果了吧。