Oracle 甲骨文;“数字”;数据类型精度

Oracle 甲骨文;“数字”;数据类型精度,oracle,plsql,Oracle,Plsql,我们试图将这些值存储在一个表中,该表有一列“Number”数据类型。当我们存储一个非常小的值(如“0.000001”)时,就会出现问题 SQL> desc testing Name Type Nullable Default Comments ---- ------ -------- ------- -------- A NUMBER Y SQL> insert into testing values (0.00000001); 1 row inserted

我们试图将这些值存储在一个表中,该表有一列“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。

这只是一个显示问题。正确设置
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

的使用这只是一个显示问题。请正确设置
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

的使用这只是一个显示问题。请正确设置
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

的使用这只是一个显示问题。请正确设置
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

请注意,这只是一个格式问题,而不是精度损失。数字支持38位有效数字。该值存储准确,应用此格式的只是SQL*Plus。请使用
或更改NLS设置设置所需设置
numformat
,请参阅我的答案。我不明白这一点。正如其他人所说,这只是一个表示问题……请注意,这只是一个格式问题,而不是精度损失。数字支持38位有效数字。值存储准确,只有SQL*加上应用此格式。如果r使用
到_char()
或更改NLS设置设置所需设置
numformat
,请参阅我的答案。我不明白这一点。正如其他人所说,这只是一个表示问题……请注意,这只是一个格式问题,而不是精度损失。数字支持38位有效数字。值存储准确,只有SQL*加上应用此格式。如果r使用
到_char()
或更改NLS设置设置所需设置
numformat
,请参阅我的答案。我不明白这一点。正如其他人所说,这只是一个表示问题……请注意,这只是一个格式问题,而不是精度损失。数字支持38位有效数字。值存储准确,只有SQL*加上应用此格式。如果r使用
到_char()
或更改NLS设置Set required
numformat
,请参见我的答案。我不明白这一点。正如其他人所说,这只是一个表示问题……感谢Lalit,主要问题是我们在一个过程中以json格式发送此数据,当我们在promt中直接使用它时,它会很好地工作,但当我们在查询和以json格式传递它,我们仍然会得到E问题。不,为什么值会被发送为“E”?问题是你所看到的,只是显示。这与我们也很想理解的一样,在前端,当json被发送到.net时,他们仍然会发现它是“E”“,试图找出是否有任何方法可以将数据以正确的格式发送到Lanks Lalit,主要问题是我们在一个过程中以json格式发送这些数据,当我们直接在promt中使用它时,这会很好,但是当我们在查询中执行并以json格式传递它时,我们仍然会以电子问题结束。不,为什么将值作为“E”发送?问题是你所看到的,只是显示。这也是我们想要理解的,在前端,当json被发送到.net时,他们仍然发现它是“E”,试图弄清楚我们是否可以以正确的格式发送数据。Lanks Lalit,主要问题是我们在一个过程中以json格式发送数据,当我们直接在promt中使用它时,这会很好地工作,但是当我们在查询中执行并以json格式传递它时,我们仍然会得到一个E-issue。不,为什么值会被发送为“E”?问题是你所看到的,只是显示。这也是我们想要理解的,在前端,当json被发送到.net时,他们仍然发现它是“E”,试图弄清楚我们是否可以以正确的格式发送数据。Lanks Lalit,主要问题是我们在一个过程中以json格式发送数据,当我们在promt中直接使用它时,这会很好地工作,但是当我们在查询中执行并以json格式传递它时,我们