2012-05-07 2 views
3

Вот мой код:генератора случайных чисел, разбивается при малых числах

var randomNumber = function(from,to,dec) 
{ 
    var num = Math.random()*(to-from+1)+from; 
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec); 
    return result; 
}; 

Цель состоит в том, чтобы получить случайные числа в заданном диапазоне и округлить результат до заданного десятичного знака. Он отлично работает для диапазонов, как 1-10 или 50-100, но когда я пытаюсь небольшое число так:

randomNumber(0.01,0.05,5) 

я получаю плохие результаты, как 0.27335 и 1.04333.

+0

Почему бы не просто округлить? –

+7

Я думаю, что это один 'var num = Math.random() * (to-from + 1) + from;' должен быть 'var num = Math.random() * (to-from) + from;' – Yoshi

ответ

2

У вас есть неохотно +1 по вашим расчетам. Должно быть to-from без +1:

var randomNumber = function (from, to, dec) { 
    var num = Math.random() * (to - from +1) + from; 
    var result = Math.round(num * Math.pow(10, dec))/Math.pow(10, dec); 
    return result; 
};

Ваш код должен выглядеть следующим образом:

var randomNumber = function (from, to, dec) { 
    var num = Math.random() * (to - from) + from; 
    var result = Math.round(num * Math.pow(10, dec))/Math.pow(10, dec); 
    return result; 
}; 

На самом деле, это может быть дополнительно сокращен путем исключения переменной result следующим образом:

var randomNumber = function (from, to, dec) { 
    var num = Math.random() * (to - from) + from; //Generate a random float 
    return Math.round(num * Math.pow(10, dec))/Math.pow(10, dec); //Round it to <dec> digits. Return. 
}; 
+0

Works! Спасибо. – mustacheMcGee

1
var randomNumber = function(from,to,dec) 
{ 
    var num = Math.random()*(to-from)+from; 
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec); 
    return result; 
} 
Смежные вопросы