Oracle表中存储“隐藏”小数位的数字列

问题描述 投票:1回答:1

这里第一个问题,因为搜索这些术语太含糊。我不知道数据如何进入表中(我想只是通过“插入tomtest(test)值(280.1);”,但不能确定),但是这个例子似乎很奇怪。为什么直接选择显示小数点后1位,而to_char选择显示小数点后14位?

SQL> set linesize 100
SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

SQL> describe tomtest
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 TEST                                                           NUMBER

SQL> select * from tomtest;

      TEST
----------
     280.1

SQL> select * from tomtest where test = 280.1;

no rows selected

SQL> select to_char(test) from tomtest;

TO_CHAR(TEST)
----------------------------------------
280.10000000000002

SQL> SELECT data_type, data_length, data_precision, data_scale FROM USER_TAB_COLS WHERE TABLE_NAME = 'TOMTEST' AND COLUMN_NAME = 'TEST';

DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE
NUMBER          22
oracle sqlplus number-formatting
1个回答
0
投票

原因是sql plus中的默认数字格式。在数据库中,您的值是280.10000000000002,而不是280.1

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