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
'programing' 카테고리의 다른 글
'Element'에서 'setAttribute'를 실행하지 못했습니다. ']'은(는) 올바른 특성 이름이 아닙니다. 각 4 (0) | 2023.08.06 |
---|---|
Swift에서 선택기에 인수 전달 (0) | 2023.08.06 |
읽기 쉬운 스트림을 종료하는 방법(종료 전) (0) | 2023.08.06 |
달러(약)너비 () 미디어 쿼리와 동일하지 않습니다. (0) | 2023.08.06 |
Mariadb SELECT는 잠금 시 실패하지 않습니다. (0) | 2023.08.06 |