普通用户
取随机数() bug [复制链接]
loong 发表于 2025-12-21 123 7

取随机数() 当取得值为负数时,返回 0 。请看下列代码:

    变量 临时画笔 = 创建 画笔()
    临时画笔.宽度=4
    '临时画笔.颜色=自颜色
    变量 随机数  整数型
    随机数=取随机数(-16777216,-986896)  '白色:-986896 黑色:-16777216
    弹出提示("随机数:" + 到文本(随机数)) '随机数: 0  <=== 这里有bug。得出的全部是 0 。
    临时画笔.整数颜色= 随机数 '-2354116 红色  '<=== 多次尝试,取随机数()什么也画不出来。
    '临时画笔.整数颜色= -2354116 '红色 画出红色矩形。
    自画板.画矩形((int)自左边,(int)自顶边,(int)长,(int)宽,临时画笔)
loong 2025-12-23
引用 @Course 的回复:

不需要啊,如果要取负100到正100之间的随机数,区间:[-100,100] ,那么只需要获取总区间长度的随机数再加上最小值就行了,一行代码就能得出,例如:

变量 随机数1 = 取随机数(0,200) - 100

也可以封装成类似您提供的自定义JS函数:

函数 取自定义随机数(最小值  整数型,最大值  整数型)
	返回 取随机数(0,最大值 - 最小值) + 最小值
结束 函数

如果是变量, 不知道其正负号, 那又麻烦了。 

取随机数() 得改。 如果不改的话,就当我没说。

回复
官方技术组 2025-12-23
引用 @Course 的回复:

不需要啊,如果要取负100到正100之间的随机数,区间:[-100,100] ,那么只需要获取总区间长度的随机数再加上最小值就行了,一行代码就能得出,例如:

变量 随机数1 = 取随机数(0,200) - 100

也可以封装成类似您提供的自定义JS函数:

函数 取自定义随机数(最小值  整数型,最大值  整数型)
	返回 取随机数(0,最大值 - 最小值) + 最小值
结束 函数

注:刚刚回复自定义函数缺少返回类型,正确的代码:

函数 取自定义随机数(最小值  整数型,最大值  整数型)  整数型
	返回 取随机数(0,最大值 - 最小值) + 最小值
结束 函数
回复
官方技术组 2025-12-23
引用 @loong 的回复:

如果一个数是正的,一个数是负的, 那还要写几句代码判断正负不成。

不需要啊,如果要取负100到正100之间的随机数,区间:[-100,100] ,那么只需要获取总区间长度的随机数再加上最小值就行了,一行代码就能得出,例如:

变量 随机数1 = 取随机数(0,200) - 100

也可以封装成类似您提供的自定义JS函数:

函数 取自定义随机数(最小值  整数型,最大值  整数型)
	返回 取随机数(0,最大值 - 最小值) + 最小值
结束 函数
回复
loong 2025-12-23

如果一个数是正的,一个数是负的, 那还要写几句代码判断正负不成。

回复
loong 2025-12-23

这是 java scriipt 代码,不管有没有正负,输出的都是正确值。

/**
 * 在两个数的区间内随机生成一个数字
 * @param {number} num1 - 区间边界1(任意数字)
 * @param {number} num2 - 区间边界2(任意数字)
 * @param {boolean} isInteger - 是否返回整数(默认 false,返回浮点数)
 * @returns {number} 区间内的随机数
 */
function randomInRange(num1, num2, isInteger = false) {
  // 第一步:处理边界顺序(确保 min ≤ max,避免用户输入顺序错误)
  const min = Math.min(num1, num2);
  const max = Math.max(num1, num2);

  // 第二步:生成区间内的随机数
  const randomFloat = Math.random() * (max - min) + min; // [min, max) 浮点数

  // 第三步:如需整数,进行取整处理(Math.floor 向下取整,得到 [min, max-1];Math.round 四舍五入得到 [min, max])
  return isInteger ? Math.floor(randomFloat) : randomFloat;
}

// 测试示例
// 1. 区间内随机浮点数(例如 -10 到 5 之间)
console.log("区间浮点数(-10 ~ 5):", randomInRange(-10, 5).toFixed(2)); // toFixed(2) 保留2位小数
//区间浮点数(-10 ~ 5): -1.32

// 2. 区间内随机整数(例如 3 到 10 之间)
console.log("区间整数(3 ~ 10):", randomInRange(3, 10, true));
//区间整数(3 ~ 10): 6

// 3. 边界顺序颠倒也能正常工作(例如 7 到 2,自动转为 2 ~ 7)
console.log("颠倒边界的整数(2 ~ 7):", randomInRange(7, 2, true));
//颠倒边界的整数(2 ~ 7): 5
回复
loong 2025-12-23

这样感觉不够好。 

回复
官方技术组 2025-12-22

感谢您的反馈,经检查,该问题不属于BUG,因为该函数在设计时只提供了针对正整数的随机取值,如果您需要获取负整数随机数,可以先取出一个正整数随机数然后乘以 ` -1 ` 其结果则为负数。

回复
 作者信息
loong
普通用户 云验证
www.znb.cc / grb.znb.cc / cnc.znb.cc
专业开发指导服务

响应时间:5分钟

服务方式:官方1对1服务

工作时间:工作日 9:00 - 18:30

专业团队 · 开发指导 · 极速响应


官网 | 基础视频教程 | 在线文档 下载 VcnStudio IDE

© VcnStudio Inc All Rights Reserved

蜀ICP备17024229号