DBMS_RANDOM.VALUE返回的值等于HIGH值

问题描述 投票:0回答:3

为什么此返回值在1到5之间?

declare
    v numeric;
begin
    v := dbms_random.value(1, 5);
    DBMS_OUTPUT.PUT_LINE(v);
end;

根据documentation,它应该返回1到4之间的值。

注意:我正在使用Oracle 12c第2版

oracle plsql oracle12c
3个回答
0
投票

我认为是因为您使用的不是标准Oracle数据类型numeric。似乎Oracle将其视为integer的同义词。因此,看来Oracle正在四舍五入到最接近的整数。

尝试使用NUMBER,您可能根本看不到5.000000000000。


0
投票

它为您舍入价值。

declare
    v numeric(6,5);
    w numeric;
begin
    v := dbms_random.value(1, 5);
    w := v;
    DBMS_OUTPUT.PUT_LINE(v);
    DBMS_OUTPUT.PUT_LINE(w);
    DBMS_OUTPUT.PUT_LINE(FLOOR(v));
end;
/

一个结果:

dbms_output:
4.92843
5
4

0
投票

其读数小于上限的特定值。

摘自oracle文档:

VALUE函数一个版本返回一个随机数,大于或等于0且小于1,小数点右边为38位数字(38位精度)。其他版本返回随机Oracle数据库NUMBER值x,其中x大于或等于指定的低值,less than the specified high value.

© www.soinside.com 2019 - 2024. All rights reserved.