通过下面的脚本案例学习理解两个函数round与 rand
Transactions:
Round(1000*Rand()*Rand()*Rand()) as Sales,
RecNo() as TransID
While rand()<0.5 or IterNo()=1;
round() 函数:
Round (x[, step[, offset]])
有3个参数 X step offset 其中x为必须
tips:在没有设置 step 和 offset 时 分别默认为 1 和 0
通过查询函数帮助手册有以下案例:
Round( 3.8 ) | 返回 4 |
Round( 3.8, 4 ) | 返回 4 |
Round( 2.5 ) | 返回 3。 向上取整, 因为 2.5 正好是默认步进间隔的一半。 |
Round( 2, 4 ) | 返回 4。 向上取整, 因为 2 正好是步进间隔 4 的一半。 |
Round( 2, 6 ) | 返回 0。 向下取整, 因为 2 小于步进间隔 6 的一半。 |
Round( 3.88 , 0.1 ) | 返回 3.9 |
Round( 3.88 , 5 ) | 返回 5 |
Round( 1.1 , 1 , 0.5 ) | 返回 1.5 |
针对其中几个我们进一步分析:
在Round(3.8)中返回结果为4 (没有设置step 和 offset 则 它们分别默认为 1,0)
当没指定X值的时候我们可以判定该函数的返回值 应该是:-1,0 ,1 ,2 ,3,4…这样的整数序列中的一个数。
可能值为什么会是这样一个序列呢 ? 因为 step 步长为1 当 为round(-3.8)时会返回 -4
所以当X指定为3.8时 函数向上取整为4
Round(3.8,4) 此时设置了step=4 offset 未指定则继续默认为0
所以在指定了step为4时 不考虑X则返回值可能是:-4,0 ,4,8,12…这样一个序列
当X指定为 3.8 时 更靠近系列中的数字4 则向上取整返回4 (往比X更大的数上取 叫向上取整,往比X更小的数取叫向下取整)
何时该向上取整,何时向下取整?
结论 步经间隔一半时,向上取整,步经间隔一半以下的向下取整。
最后的
Round( 1.1 , 1 , 0.5 ) 通过这样指定后 若不考虑X值则返回值可能值为这样一个序列: -1.5,-0.5,0.5,1.5,2.5,3.5,4.5…
1.1 更靠近 1.5 而不是 0.5 所以最后返回结果是 1.5
在上面的脚本中 用到了rand 函数,我们知道系统每调用一次rand()就会产生一个0-1之间的一个数,所以load的每一条记录中使用rand()获取到的值是不同的,则在最后的while中和前面的rand()的值也是不同的。