我正在使用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作为最大值?
答案 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有答案。