Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于生成相似数字的Javascript函数_Javascript_Random - Fatal编程技术网

用于生成相似数字的Javascript函数

用于生成相似数字的Javascript函数,javascript,random,Javascript,Random,给定一个浮点数,请帮助我编写一个函数,生成一个小数点后百分之一位的修改数 例如: 4.32 => 4.38 5.10 => 5.11 8.37 => 8.31 以下是而不是以下 4.32 => 4.29 9.99 => 10.00 这应该能奏效 function simNumber(num){ return Math.floor(num) + Math.random() } 但是,值得注意的是,随机函数不一定返回小数点后两位的值 澄清:Math.ran

给定一个浮点数,请帮助我编写一个函数,生成一个小数点后百分之一位的修改数

例如:

4.32 => 4.38
5.10 => 5.11
8.37 => 8.31
以下是而不是以下

4.32 => 4.29
9.99 => 10.00

这应该能奏效

function simNumber(num){
    return Math.floor(num) + Math.random()
}
但是,值得注意的是,随机函数不一定返回小数点后两位的值

澄清:Math.random()返回>0和<1

更新:

试试这个:

function simNumber(num) {
    return Math.floor((Math.floor(num * 10) + Math.random()) * 10) / 100;
}
这项工作:

function simNumber(num) {
    return parseFloat(num.toString() + Math.random().toString().substr(2,1));
}

演示:

此函数使用随机数字[0,9]替换第一百位的数字,然后在拾取相同数字时进行拒绝采样。应该工作正常:

function randomHundredths(x) {
  var r, y;
  do {
    r = Math.floor(Math.random() * 10); // [0, 9]
    y = Number(x.toFixed(2).replace(/\d$/, r));
  } while (y == x);
  return y;
}

jshiddle:

为什么要投反对票?这是一个要求帮助编写函数的完全合理的问题。我在放屁。不是我的反对票,但也许加入你的编码尝试会有所帮助。有些人喜欢看到一些迹象,表明你首先尝试了自己,而不仅仅是要求别人为你这么做。@Mike Downvots通常是没有道理的,从来没有发表过悲伤的评论。天哪,你会认为3.1k代表,像这样的人会意识到我知道这里的礼仪。
4.32=>4.29
的反例怎么不好?它仍然是同一个整数,对吗?这也会改变十分之一的数字。Asker想要的是相同的十分之一位数,只是在百分之一级别上变化。根据w3c网站,random将返回一个介于>0和<1之间的值。@SOliver是正确的,但这不是他想要的。如果随机数为
0.5
,则
9.99+0.5==10.49
,这是无效的结果。结果应该以
9.9
开始,并有一个随机的百分之一位数。我认为你也应该将
Math.floor的
Math.round
更改为
Math.random()>=0.995
如果起始数字是小数点后两位,如示例中所示怎么办?@James Montagne:Add
num.toString().length
。这很好,但它可以返回相同的数字,这可能对您合适。请参阅我的答案,其中添加了拒绝抽样,以确保数字不同。发布了与maerics相同的评论-因此被删除。我认为您的意思是“result=parseFloat(…”不返回。@NoelWalters*innocent whistle*
function randomHundredths(x) {
  var r, y;
  do {
    r = Math.floor(Math.random() * 10); // [0, 9]
    y = Number(x.toFixed(2).replace(/\d$/, r));
  } while (y == x);
  return y;
}
function similar(num) {
    var result = num;
    while (result == num) {
        result = parseFloat(
            num.toFixed(2).substring(0,3) + 
            Math.random().toString().substr(2,1)
        );
    }
    return result;
}