使用PHP生成两个小数之间的随机小数

问题描述 投票:0回答:5

我需要在 PHP 中生成一个随机数,精确到 2 位小数之间的第 10 位。

例如。 1.2 到 5.7 之间的兰特数。它将返回 3.4

我该怎么做?

php random
5个回答
75
投票

您可以使用:

rand ($min*10, $max*10) / 10

甚至更好:

mt_rand ($min*10, $max*10) / 10

6
投票

你可以这样做:

rand(12, 57) / 10

PHP 的随机函数允许您仅使用整数限制,但您可以将生成的随机数除以 10。


6
投票

更通用的解决方案是:

function count_decimals($x){
   return  strlen(substr(strrchr($x+"", "."), 1));
}

public function random($min, $max){
   $decimals = max(count_decimals($min), count_decimals($max));
   $factor = pow(10, $decimals);
   return rand($min*$factor, $max*$factor) / $factor;
}

$answer = random(1.2, 5.7);

0
投票

如果你想作为功能

/**
 * @param float $min
 * @param float $max
 * @param int $digit
 * @return float|int
 */
public function randomDecimal(float $min, float $max, int $digit = 2): float|int
{
    return mt_rand($min * 10, $max * 10) / pow(10, $digit);
}

0
投票

我没有找到一个好的通用解决方案,您可以选择想要的小数位数。所以,我创建了一个:

public static function randomFloat(int|float $min, int|float $max, $decimals = 2): float
{
    $times = 10 ** $decimals;

    return (float) random_int(round($min * $times), round($max * $times)) / $times;
}
© www.soinside.com 2019 - 2024. All rights reserved.