在Adobe Acrobat中使用Javascript生成5个随机数字

时间:2017-03-01 01:28:06

标签: javascript pdf adobe acrobat

我正在使用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位数。

我做错了什么?

感谢reples。对不起,我对javascript很缺乏经验。我猜你的意思是:

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

但是我怎么能把这个放在我自己的代码中,其中10000作为最小值,99999作为最大值?

2 个答案:

答案 0 :(得分:1)

表达式rnd() * 99999将为您提供0..99999范围内的数字(此处的所有范围都包含在较低端,独占位于较高端,因此此范围确实如此包括99999)。当您添加1000时,您将获得1000..100999范围内的数字。

这是四位,五位或六位数字,但是因为你用%05d强制一个前导零来打印它们,所以你永远不会看到四位数。但是,%05d指定了一个最小字段宽度,因此会传递六位数的数字,因此为什么会看到五位和六位数字。

如果您在五位数之后没有前导零,则应该获得0..90000 then adding ten thousand to translate that to 10000..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(填充为5个字符的字符串)之后的数字之后,请分别使用:

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

答案 1 :(得分:0)

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

考虑使用 toFixed 来保留前导零(假设字符串正常):



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




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

但是,如果你想要10,000到99,9999范围内的数字,paxdiablo有答案。