当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. JUC之Atomic系列12大类实例讲解和原理分解

    在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的AB ...

  2. Android中获取应用程序(包)的信息----PackageManager

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:   第一部分: 获取应用程序的packagena ...

  3. history命令

    在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中.通过这个文件可以查询 shell 命令 ...

  4. 《Python 学习手册4th》 第十章 Python语句简介

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  5. 恒天云技术分享系列5 – 虚拟化平台性能对比(KVM & VMware)

    恒天云技术分享系列:http://www.hengtianyun.com/download-show-id-14.html 概述 本性能测试报告将详细陈述各虚拟化平台基准性能测试的主要结论和详细结果. ...

  6. SDN环境搭建(mininet,OVS,ryu安装及命令)

    1.mininet安装与使用 1.1mininet安装 ubuntu 12.04/14.04/14.10      命令行  sudo apt-get install mininet 1.2 mini ...

  7. Codeforces 380 简要题解

    ABC见上一篇. 感觉这场比赛很有数学气息. D: 显然必须要贴着之前的人坐下. 首先考虑没有限制的方案数.就是2n - 1(我们把1固定,其他的都只有两种方案,放完后长度为n) 我们发现对于一个限制 ...

  8. 问题-XE8报Object factory for class{xx-xx-xx-xx-xx} is missing. To register it, you can drop component[TFDGUIxWaitCursor] into your project.

    问题现象:XE8开发数据访问程序时放入了FDPhysMSSQLDriverLink1.FDConnection1.FDConnection1.FDQuery1.DBGrid1,设计期没法,运行期报&q ...

  9. Hibernate HQL和原生SQL查询的一点区别

    1.createSQLQuery 1.1默认查询的结果为BigDecimal 1.2通过addScalar("CGD_ID", StandardBasicTypes.LONG)可以 ...

  10. Lua学习笔记(五):面向对象的实现

    Lua本身是没有class之类的关键字的,但是我们可以巧妙利用function也是值和table的特性来实现面向对象的特性. 通过复制表的实现 Lua中的类也是一个table对象,下面我们看看一个简单 ...