Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужен готовый скрипт генерации случайного числа в заданном диапазоне...
 
 автор: coloboc66   (02.03.2012 в 10:25)   письмо автору
 
 

Может - кто подскажет?
Спасибо.

  Ответить  
 
 автор: elenaki   (02.03.2012 в 11:00)   письмо автору
 
   для: coloboc66   (02.03.2012 в 10:25)
 

function getrandom() {

var min_random = 1;
var max_random = 9;

max_random++;

var range = max_random - min_random;
var n=Math.floor(Math.random()*range) + min_random;

return n;
}

  Ответить  
 
 автор: coloboc66   (02.03.2012 в 11:33)   письмо автору
 
   для: elenaki   (02.03.2012 в 11:00)
 

Спавсибо, Лена! Для целых чисел скрипт работает хорошо, а вот для чисел с плавающей точкой - некорректно, часто генерирует число больше заданного максимального. Для работы с такими числами я этот скрипт немного переделал и получаю указанную проблему:
function getrandom() { 
var min_random = document.getElementById("gorndtbfrom").value * 1; 
var max_random = document.getElementById("gorndtbto").value * 1;
max_random++; 
var range = max_random - min_random; 
var n=Math.random()*range + min_random; 
n=n.toFixed(2);
document.getElementById("gorndlbl").innerHTML =n;
//return n; 

  Ответить  
 
 автор: elenaki   (02.03.2012 в 11:57)   письмо автору
 
   для: coloboc66   (02.03.2012 в 11:33)
 

а где проблема-то?


<script>
function getrandom() {  
var min_random = 1.1; //document.getElementById("gorndtbfrom").value * 1;  
var max_random = 5.5;//document.getElementById("gorndtbto").value * 1; 
max_random++;  
var range = max_random - min_random;  
var n=Math.random()*range + min_random;  
n=n.toFixed(2); 
//document.getElementById("gorndlbl").innerHTML =n; 
return n;  
}  
document.write(getrandom())
</script>


больше 5,5 не получаю...

  Ответить  
 
 автор: Yuriev   (02.03.2012 в 14:25)   письмо автору
 
   для: elenaki   (02.03.2012 в 11:57)
 

Мой комп тоже выдаёт больше чем 5,5.
Может потому, что max_random++ прибавляет единичку, а при таком примере
var min_random = 1.1
var max_random = 5.5
надо прибавлять не единичку, а 0.1 или даже меньше?

  Ответить  
 
 автор: coloboc66   (02.03.2012 в 14:51)   письмо автору
 
   для: Yuriev   (02.03.2012 в 14:25)
 

Может от браузера зависит? У меня ИЕ8.

  Ответить  
 
 автор: ЯСА   (02.03.2012 в 14:57)   письмо автору
 
   для: elenaki   (02.03.2012 в 11:57)
 

Непонятно, зачем увеличивать на единицу?

Math.random () генерирует псевдослучайные числа от 0 до 1 включительно (текст из документации - "The pseudorandom number generated is between 0 and 1 inclusive")

Поэтому всё просто:
var MyRnd = new Function ('Ot', 'Do', 'Posle_zapjatoy', 'return (Ot + Math.random () * (Do - Ot)).toFixed (Posle_zapjatoy)');

alert (MyRnd (1.2345, 6.7890, 4));

Для проверки подставьте крайние значения - 0 и 1.
И проверьте:
//проверяем на 0                                                        *
var MyRnd_0 = new Function ('Ot', 'Do', 'Posle_zapjatoy', 'return (Ot + 0 * (Do - Ot)).toFixed (Posle_zapjatoy)');
alert (MyRnd_0 (1.2345, 6.7890, 4) + ' == 1.2345');


//проверяем на 1                                                        *
var MyRnd_1 = new Function ('Ot', 'Do', 'Posle_zapjatoy', 'return (Ot + 1 * (Do - Ot)).toFixed (Posle_zapjatoy)');
alert (MyRnd_1 (1.2345, 6.7890, 4) + ' == 6.7890');

  Ответить  
 
 автор: coloboc66   (02.03.2012 в 18:09)   письмо автору
 
   для: ЯСА   (02.03.2012 в 14:57)
 

Действительно: закомментировал в ленином скрипте увеличение на единицу и вроде всё корректно заработало.

  Ответить  
 
 автор: elenaki   (02.03.2012 в 18:29)   письмо автору
 
   для: ЯСА   (02.03.2012 в 14:57)
 

не знаю. так было, я ничего не меняла, т.к. меня все устраивало. а зачем менять то, что работает?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования