我们正在尝试将值存储在一个表中,该表的列为" Number"数据类型。当我们存储一个非常小的值时会出现问题,例如" 0.000001。
SQL> desc testing
Name Type Nullable Default Comments
---- ------ -------- ------- --------
A NUMBER Y
SQL> insert into testing values (0.00000001);
1 row inserted
SQL> select * from testing;
A
----------
0.001
1E-5
1E-8
0.0001
有没有办法,我们可以存储和检索绝对值,如商店,0.00001而不是1E-5。
答案 0 :(得分:3)
这只是一个DISPLAY问题。正确设置 numformat
。
例如,
SQL> create table t(a number);
Table created.
SQL> insert into t values(0.000000000000001);
1 row created.
SQL> select * from t;
A
----------
1.0000E-15
SQL> set numformat 9D9999999999999999
SQL> select * from t;
A
-------------------
.0000000000000010
SQL>
更新 OP表示在尝试将数字值发送到应用程序前端时,上述操作无法解决问题。应用程序正在使用的特定于语言环境的NLS设置一定有问题。
如果问题仅在于显示,那么您可以使用to_char
和正确的格式模型将其转换为char。
SQL> create table t(a number);
Table created.
SQL> insert into t values(.000000000000000000001);
1 row created.
SQL> select * from t;
A
----------
1.0000E-21
SQL> select ltrim(to_char(a, '9999999D999999999999999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''')) num from t
NUM
------------------------------
.000000000000000000001
SQL>
请注意ltrim
的使用。