【问题标题】:PHP rand function generates wrong valuesPHP rand 函数生成错误的值
【发布时间】:2015-09-01 08:35:44
【问题描述】:

我对 php 函数 rand 有一点问题。数组是一个数字介于 0.1 和 1 之间的数组。

 $min = $this->array[0]*10;
 $max = $this->array[1]*10;
 array_push($this->motor, rand($min, $max), rand($min,$max));

rand 偶尔会生成 0,其余时间 rand 函数可以正常工作。有人知道我做错了什么吗?

【问题讨论】:

标签: php random


【解决方案1】:

rand 仅适用于整数精度。所有浮点输入都转换为整数。根据定义,浮点数并不完全精确,略低于 1 的值将被截断为 0。

【讨论】:

  • 你需要除以 10 个后缀。例如rand($min*10, $max*10) / 10
  • @Bruno 同样,浮点运算不精确。如果您的输入刚好低于 0.1,那么将其乘以 10 仍会得到一个值
  • @decez 假设最小值为 0.1,最大值为 1,乘以 10 将得到最小值 1 和最大值 10,然后除以 10 将得到所需的结果。
  • @Bruno 您必须在此处提供一个可重现的示例。 rand 不应该返回 0 如果它的输入是 >= 1。我们现在只是在你的话。
  • ideone.com/Fm5rxH 这里是 rand 的 100 次迭代,没有返回 0。当 rand 的结果为 0 时,我们需要查看 $this->array 返回的内容。
【解决方案2】:

试试这个:

$randomNumber = (float)rand($min, $max) / (float)$max;

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2014-02-21
    • 1970-01-01
    • 2015-09-29
    • 2022-11-17
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多