【问题标题】:Javascript function for generating similar numbers用于生成相似数字的 Javascript 函数
【发布时间】:2012-01-11 01:10:11
【问题描述】:

给定一个浮点数,帮助我编写一个函数,生成一个小数点后百分之一的数字。

例如:

4.32 => 4.38
5.10 => 5.11
8.37 => 8.31

以下是关注

4.32 => 4.29
9.99 => 10.00

【问题讨论】:

  • 为什么投反对票?这是一个在编写函数时寻求帮助的完全合理的问题。我在放屁。
  • 不是我的反对意见,但也许加入你的编码尝试会有所帮助。有些人喜欢看到一些迹象表明您先尝试了自己,而不仅仅是要求别人为您做。
  • @Mike Downvotes 通常是没有道理的,也从未悲伤地发表过评论。
  • 天啊,你会认为有 3.1k 代表,这样的人会意识到我知道这里的礼仪。
  • 4.32 => 4.29的反例怎么不行?它仍然是同一个整数,对吧?

标签: javascript random


【解决方案1】:

试试这个:

function simNumber(num) {
    return Math.floor((Math.floor(num * 10) + Math.random()) * 10) / 100;
}

【讨论】:

  • 这很好,只是它可以返回相同的数字,这对你来说可能没问题。请参阅我的答案,其中添加了拒绝抽样以确保数量不同。
  • 发表了与 maerics 相同的评论 - 所以删除了
【解决方案2】:

更新:

http://jsfiddle.net/RHy5d/1/

var num = 3.21;

var newNum = (Math.floor(num*10) + Math.random())/10;

var newNumRounded = Math.floor(newNum*100)/100;

【讨论】:

  • 我认为您也应该将Math.round 更改为Math.floor,因为Math.random() >= 0.995 会中断
【解决方案3】:
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;
}

JSFiddle:http://jsfiddle.net/n3dst4/8KLFa/

【讨论】:

  • 我认为你的意思是“result = parseFloat(...” 不返回。
  • @NoelWalters * 无辜的口哨 *
【解决方案4】:

此函数用随机数字 [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;
}

【讨论】:

    【解决方案5】:

    这行得通:

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

    一个演示:http://jsfiddle.net/2QNqw/

    【讨论】:

    • 如果起始数字保留 2 位小数,如示例中所示?
    • @James Montagne:添加num.toString().length
    【解决方案6】:

    这应该可以解决问题

    function simNumber(num){
        return Math.floor(num) + Math.random()
    }
    

    值得注意的是,随机函数不一定会返回小数点后两位的值。

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

    【讨论】:

    • 这也可以改变十分位。 Asker 想要相同的十分位数字,仅在百分之一级别上更改。
    • 根据 w3c 网站 random 将返回 > 0 和
    • @SOliver 正确,但这不是他想要的。如果随机数是0.5,那么9.99 + 0.5 == 10.49,这不是一个有效的结果。结果应以9.9 开头,并有一个随机的百分之几。
    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 2017-07-14
    • 2018-05-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多