programing

0에서 1.0 php 사이의 임의 부동 소수

topblog 2023. 8. 6. 09:05
반응형

0에서 1.0 php 사이의 임의 부동 소수

중복 가능성:
php의 랜덤 플로트

0.4, 0.8 등과 같이 0과 1.0 사이의 임의 부동 소수점을 생성할 수 있습니까?랜드를 사용했는데 정수만 가능합니다.

mt_rand() / mt_getrandmax();

사용하지 마십시오.rand()일반적으로 플랫폼의 C에 의존하기 때문에 기능rand()구현, 일반적으로 매우 간단한 패턴으로 숫자를 만듭니다. 의견은 php.net 에서 확인할 수 있습니다.

업데이트: php 7.1에서rand()변경되어 이제는 의 별칭에 불과합니다.mt_rand()따라서 이제 사용해도 괜찮습니다.rand(),너무.

그냥 10으로 나누면 어떨까요?

$randomFloat = rand(0, 10) / 10;
var_dump($randomFloat);

//eg. float(0.7)
$v = mt_rand() / mt_getrandmax();

그렇게 할 것입니다.


소수점 이하 한 자리만 원하는 경우(문제의 예와 같이)round()당신이 얻는 가치는...

$v = round( $v, 1 );

...또는 0에서 10 사이의 숫자를 계산하고 10으로 나눕니다.

$v = mt_rand( 0, 10 ) / 10;

PHP 문서에 따르면 PHP 7을 사용하는 경우 random_int를 사용하여 암호화상 안전한 의사 무작위 정수를 생성할 수 있습니다.

이와 같이, 두 숫자 사이에 임의의 부동 소수를 생성하기 위해 이를 활용하는 함수는 다음과 같습니다.

function random_float($min, $max) {
    return random_int($min, $max - 1) + (random_int(0, PHP_INT_MAX - 1) / PHP_INT_MAX );
}

random_int()가 mt_rand()보다 안전하지만 속도도 느립니다.

이 답변의 이전 버전은 당신이 PHP와 ()를 사용할 것을 제안했고, 끔찍한 구현을 했습니다.나는 다른 사람들이 이미 말한 것을 반복하지 않고 내 대답을 바꾸고 싶었고, 지금 우리는 여기에 있습니다.

다음과 같은 간단한 솔루션은 어떻습니까?

abs(1-mt_rand()/mt_rand()) 

또는

/**
 * Generate Float Random Number
 *
 * @param float $Min Minimal value
 * @param float $Max Maximal value
 * @param int $round The optional number of decimal digits to round to. default 0 means not round
 * @return float Random float value
 */
function float_rand($Min, $Max, $round=0){
    //validate input
    if ($min>$Max) { $min=$Max; $max=$Min; }
        else { $min=$Min; $max=$Max; }
    $randomfloat = $min + mt_rand() / mt_getrandmax() * ($max - $min);
    if($round>0)
        $randomfloat = round($randomfloat,$round);

    return $randomfloat;
}

사용해 보세요.

// Generates and prints 100 random number between 0.0 and 1.0 
$max = 1.0;
$min = 0.0;
for ($i = 0; $i < 100; ++$i)
{
    print ("<br>");
    $range = $max - $min;
    $num = $min + $range * (mt_rand() / mt_getrandmax());    
    $num = round($num, 2);
    print ((float) $num);
}

플로팅* 및 분할할 캐스트:getrandmax().


PHP의 임의적인 타입 저글링 규칙에서는 캐스트가 불필요한 것 같습니다.하지만 다른 언어로도 가능합니다.

언급URL : https://stackoverflow.com/questions/14155603/random-float-number-between-0-and-1-0-php

반응형