有一次在串接合作厂商的 API 时,需要把他原本取 token 的 javascript 改写成 PHP 版;其中有一个步骤需要用 PHP 产生介於 0 到 1 之间的浮点数,看似简单却卡了我一阵子。
原因是 PHP 似乎没有提供一个函式可以直接做到(有的话请告诉我>_<)
PHP 提供的乱数函式,会回传一个整数,可以给订一个范围
rand(0,15); // 0 <= output <= 15
如果为给定范围,会回传一个 0 到 RAND_MAX 的随机整数。
而 RAND_MAX 是多少呢?这会根据所使用系统而有所不同,可以透过 getrandmax()
得知。
getrandmax(); // output 2147483647,2的31次方减1,32位元有号整数的最大值
实作前要再确认是需求是哪种
可以用rand()除以最大值 RAND_MAX。
rand() / getrandmax(); // 0 <= output <= 1
但这做法理论上会包含 0 和 1,只是机率很小,保守一点可以做排除。
$rand = rand() / getrandmax();
while ($rand == 1 || $rand == 0) {
$rand = rand() / getrandmax();
}
另外分享一个另类的做法,就是用 sin()
,利用他会回传一个 -1 到 1 浮点数的特性来做,以前做动画常常会用到(茶)
感谢帮友提醒,这方法数值偏两端(0 跟 1)的机率会比中间(0.5)的高
// 确实会产生介於 0 到 1 之间的数,但非平均分布
(sin(rand())+1)/2;
注意,这边 sin()
的输入单位是弧度 (角度转弧度)
>>: Day_01: 让 Vite 来开启你的Vue 前言
我决定试试看做个简单的手机游戏,先把最重要的build流程理顺了,再来决定怎麽开发。 这次一样有参考...
今天要接续昨天的继续介绍基础资料型别,如下 Enum 型别 Null 型别 Undefined 型别...
来到了倒数第二天 真是快被榨乾了呢(还真是没料 (┐「﹃゚。)) 但说好写三十篇技术文就是要灌满三十...
接续昨日的DialogFlow对话流设计後, 现在你已经拥有了一个能执行的语音应用程序! 接下来,...
Git与Github关系? 说明 : Github是Git进行版本控制软件的服务平台供应商之一。 G...