【问题标题】:Generate 5 random digit number using Javascript in Adobe Acrobat在 Adob​​e Acrobat 中使用 Javascript 生成 5 个随机数字
【发布时间】:2017-03-01 01:28:05
【问题描述】:

我正在使用if (this.getField("Form No").valueAsString=="") {
this.getField("Form No").value = util.printf("%05d", Math.floor((Math.random() * 99999) + 1000));
}

尝试在打开 PDF 时用随机的 5 位数字填充文本字段。它似乎生成了一个 5-6 位而不是 5 位的数字。

我做错了什么?

感谢回复。对不起,我对 javascript 非常缺乏经验。我假设你的意思是:

function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min; }

但是我如何将其实际放入我自己的代码中,最小为 10000,最大为 99999?

【问题讨论】:

  • 你加了 1000
  • 在重复题中使用算法,10000为最小值,99999为最大值。如果您可以接受前导零,请使用 0 作为最小值。
  • 感谢您的回复。对不起,我对 javascript 非常缺乏经验。我假设您的意思是: function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min;但是我如何将其实际放入我自己的代码中,最小为 10000,最大为 99999?
  • “但我如何将它实际放入我自己的代码中” - 只需定义 getRandomArbitrary() 函数并使用这些值调用它:getRandomArbitrary(10000, 99999)

标签: javascript pdf adobe acrobat


【解决方案1】:

表达式rnd() * 99999 将在0..99999 范围内为您提供一个数字(这里的所有范围都包含在下端和不包含 在上端,所以这个范围不是 包括99999)。当您将1000 添加到其中时,您将获得1000..100999 范围内的数字。

这是四位、五位或六位数字,尽管您永远不会看到四位数字,因为您使用%05d 强制前导零来打印它们。但是,%05d 指定了一个最小 字段宽度,因此六位数的数字不会发生变化,因此您会看到五位数和六位数的数字。

如果您要的是一个五位数字没有前导零,您应该得到一个 0..90000then adding ten thousand to translate that to10000..100000` 范围内的数字,例如:

Math.floor(Math.random() * 90000) + 10000

或者,使用广义函数:

function getRangeVal(lo, hi) {
    return Math.floor(Math.random() * (hi + 1 - lo)) + lo;
}
val = getRangeVal(10000, 99999);

后一种方法的优点是能够从任意范围内生成数字,而无需考虑太多。例如,它还可以轻松地从0..100000 中生成一个五位数字:

val = getRangeVal(0, 100000);

如果这就是你所追求的(你的问题有点模糊,因为它都添加了一个偏移量,好像你希望它从 10000 开始 并且 使用 %05d 好像你允许数字 低于 10000)。

所以,最重要的是,如果您在 10000..100000 和 `0..100000(作为填充为五个字符的字符串)中的数字之后,请分别使用:

strVal = util.printf("%5d",getRangeVal(10000, 99999));
strVal = util.printf("%05d",getRangeVal(0, 99999));

【讨论】:

  • 谢谢伙计,所以使用:'Math.floor(Math.random() * 90000) + 10000' 应该会给我想要的随机 5 位数字的结果吗?
  • @christo,是的,假设您对“5 位数字”的定义是两端的 1000099999 范围。但是,我仍然建议您使用 getRangeVal() 函数,这样您就不必再考虑这个问题了。生命太短暂,不能在整个职业生涯中一遍又一遍地编写相同的代码:-)
  • 谢谢。你所说的 90% 对我来说没有多大意义,因为我对 JS 的经验接近于零。我不确定如果 'Math.floor(Math.random() * 90000) + 10000' works for what I'm wanting. I'm not even sure how I would add: strVal = util.printf("%5d",getRangeVal(10000, 99999)); strVal = util.printf("%05d",getRangeVal(0, 99999));` 无论如何我的代码.. 我是一个完全的菜鸟,但非常感谢你的帮助!
  • 没关系,@christo,最后使用“底线”的东西。至于您如何使用util.printf,请按照您当前在问题中的做法使用它,将其分配给form number 字段值。但是,如果您更喜欢使用简单的计算而不是函数,那也没关系。在这种情况下它也能正常工作。
【解决方案2】:

如果您需要生成 0 到 99,999 范围内的 5 位数字,则需要保留前导零。

考虑使用 toFixed 保留前导零(前提是字符串可以):

console.log( Math.random().toFixed(5).replace(/\d\./,'') );

您也可以使用函数来填充指定数量的前导零,但这似乎比所需的要复杂一些。

但是,如果您想要 10,000 到 99,9999 范围内的数字,paxdiablo 可以提供答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2021-01-15
    • 2013-11-29
    相关资源
    最近更新 更多