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 のような悪い結果が得られます。

4

2 に答える 2

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.
};
于 2012-05-07T11:22:27.743 に答える
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;
}
于 2012-05-07T11:29:54.903 に答える