当rand($number)或者mt_rand($number)的时候,$number太大,超过pow(2,31) - 1;即整型最大值的时候,会出现负数。

如果只是单纯转换成整数而已的话,可以采用sprintf('%u', $number)来处理,如果是概率统计,过滤一定的范围的话,可以看看如下解决方案:

 public function my_mt_rand($randMaxValue) {
$intMaxValue = pow(2,31) - 1; //rand函数最大值
$maxValueLen = strlen($randMaxValue); //最大值的长度
$intMaxValueLen = strlen($intMaxValue); //rand函数最大值的长度 /*if($randMaxValue>$intMaxValue){
$randValue = mt_rand(0, $intMaxValue);
}else{
$randValue = mt_rand(0, $randMaxValue);
}
return $randValue;*/ if ($randMaxValue > $intMaxValue) {
if ($maxValueLen == $intMaxValueLen) {
//$randValue = mt_rand(0, $intMaxValue);
$randValue = $this->getIntMaxBetween($randMaxValue, $intMaxValue);
} else {
$temp_a = mt_rand(0, substr($randMaxValue, -$intMaxValueLen)); //低位 if ($temp_a > $intMaxValue) {
$temp_a = $this->getIntMaxBetween($temp_a, $intMaxValue);
} $temp_b = mt_rand(0, substr($randMaxValue, 0, ($maxValueLen - $intMaxValueLen))); //高位
$randValue = $temp_a + $temp_b * pow(10,$intMaxValueLen);
}
}else{
$randValue = mt_rand(0, $randMaxValue);
} return $randValue;
} public function getIntMaxBetween($a, $b) {
if ($a > $b) {
$divideNumber = intval($a/$b);
$modNumber = intval($a%$b); $returnVal = 0; //$returnVal = mt_rand(0,$divideNumber) * mt_rand(0,$b);
if ($divideNumber > 10) {
$returnVal += mt_rand(0,$divideNumber) * mt_rand(0,$b);
} else {
for($m = 0; $m < $divideNumber; $m++) {
$returnVal += mt_rand(0,$b);
}
} if ($modNumber > 0) {
$returnVal += mt_rand(0,$modNumber);
} return $returnVal;
} else {
$returnVal = mt_rand(0, $a);
} return $returnVal;
}

调用:$randValue = $this->my_mt_rand($randMaxValue);//获取随机数

rand值出现负数的解决方案的更多相关文章

  1. jquery ajax return值不能取得的解决方案

    jQuery ajax - ajax() 方法 http://www.w3school.com.cn/jquery/ajax_ajax.asp http://www.cnblogs.com/fqw19 ...

  2. @Value取值为NULL的解决方案------https://blog.csdn.net/zzmlake/article/details/54946346

    @Value取值为NULL的解决方案 https://blog.csdn.net/zzmlake/article/details/54946346

  3. C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone

    C# Json反序列化   Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...

  4. Android .getRGB得到是负数,解决方案

    情景:ava.awt.color 下面的getRGB怎么得出的是负数???本来想通过getRGB得到一个整数,在另外的一个部分在根据这个整数构件一个color,因为参数规定只能能传整数!!!color ...

  5. 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案)

    主要功能:变灰,去噪,等提高清晰度等 代码类博客,无需多说,如下: public class UnCodebase { public Bitmap bmpobj; public UnCodebase( ...

  6. IOS9.0中hash值的bug与解决方案

    事件起因 事情是这样的:产品上线发布,突然出现了问题.运营Gg过来反应,当场给露珠演示,运营同事的手机是iphone,bug确实是存在的.奇怪的是露珠用了其他iphone手机(借别人的,露珠的是吊死安 ...

  7. Js获取元素样式值(getComputedStyle&currentStyle)兼容性解决方案

    因为:style(document.getElementById(id).style.XXX)只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的. 一般js获取内部样式和外部样式使用 ...

  8. selenium中webdriver识别class属性多个值中有空格的解决方案

    初学自动化测试,貌似大家十有八九都是用百度网站进行练手的,特此感谢百度. http://www.baidu.com 页面中主要就是搜索框和提交按钮: 输入框各元素属性:<input id=&qu ...

  9. C#中当服务器返回的数据json中key的值为数字类型,解决方案

    客户端向服务器发送请求后,服务器返回了一个json格式的字符串但是格式中key的值有些事数字{"1000":"55555"}; 类似这种格式的话就不能直接转化成 ...

随机推荐

  1. Java SE 6 新特性: Java DB 和 JDBC 4.0

    http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...

  2. C++实现离散余弦变换(参数为二维指针)

    C++实现离散余弦变换(参数为二维指针) 写在前面 到目前为止已经阅读了相当一部分的网格水印等方面的论文了,但是论文的实现进度还没有更上,这个月准备挑选一些较为经典的论文,将其中的算法实现.在实现论文 ...

  3. cocos2d-x知识巩固-基础篇(2)

    上一篇博客介绍了整个cocos2dx引擎需要掌握的各个模块,每一个模块实际上往深了研究都有难点,后面我会详细地去分析它的用法.今天我们从第一个模块说起,即渲染模块.首先,为了理解,我们做个类比,说明该 ...

  4. 通过简单的Linux内核启动程序代码窥探操作系统的启动原理

    作者:吴乐  山东师范大学 <Linux内核分析> 孟宁 MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.程序设计与分析 ...

  5. 修改linux主机名称

    linux修改主机名如下操作即可: [root@kel ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAM ...

  6. PHP获取Cookie模拟登录

    关键字:CURL Cookie CURLOPT_COOKIEJAR CURLOPT_COOKIEFILE 模拟登录 PHP作者:方倍工作室原文:http://www.cnblogs.com/txw19 ...

  7. [LeetCode] Add Digits (a New question added)

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  8. [Hive - LanguageManual] Create/Drop/Grant/Revoke Roles and Privileges / Show Use

    Create/Drop/Grant/Revoke Roles and Privileges Hive Default Authorization - Legacy Mode has informati ...

  9. [Java基础]Java通配符

    转自:http://peiquan.blog.51cto.com/7518552/1303768 本以为这会是一篇比较基础的博客,可一旦深究的时候,才发现很多有意思的东西,也发现了很多令人迷惑的地方. ...

  10. Native libraries .so.XY failing to link at runtime

    What you need to do is edit the configure file. And find out this: SLIBNAME='$(SLIBPREF)$(FULLNAME)$ ...