重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个是双精度数据的存储问题,既然是double,数据必然存在这样的问题。
专注于为中小企业提供网站设计制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业光山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
所以,你可以在需要显示的时候,进行格式化,
c里面 的格式 好像是 ".2f%",proc应该也有对应的功能,你找一下。
NUMERIC(p,s):完全映射至NUMBER(p,s)。如果p未指定,则默认为38.
DECIMAL(p,s)或DEC(p,s):完全映射至NUMBER(p,s)。如果p为指定,则默认为38.
INTEGER或INT:完全映射至NUMBER(38)类型。
SMALLINT:完全映射至NUMBER(38)类型。
FLOAT(b):映射至NUMBER类型。
DOUBLE PRECISION:映射至NUMBER类型。
REAL:映射至NUMBER类型。
以上这些类型只是oracle在语法上支持的,在底层实际上还是number
1.表示的数值范围
NUMBER:Oracle NUMBER类型能以极大的精度存储数值,具体来讲,精度可达38位。其底层数据格式类似一种
“封包小数“表示。Oracle NUMBER类型是一种变长格式,长度为0~22字节。它可以存储小到10e-130、
大到(但不包括)10e126的任何数值。这是目前最为常用的数值类型。也是Oracle9i Release 2及以
前的版本只支持的唯一一种适合存储数值数据的固有数据类型,其他一起兼容类型只是一种和number
之间的映射,在底层实际上都是number
BINARY_FLOAT:这是一种IEEE固有的单精度浮点数。它在磁盘上会占用5字节的存储空间:其中4个固定字节用
于存储浮点数,另外还有一个长度字节。BINARY_FLOAT能存储有6为精度、范围在~±1038.53
的数值
BINARY_DOUBLE:这是一种IEEE固有的双精度浮点数。它在磁盘上会占用9字节的存储空间:其中8个固定字节用
于存储浮点数,还有一个长度字节。BINARY_DOUBLE能存储有12.位精度、范围在~±10308.25的
数值。
取值范举例:
创建测试表t2
SQL create table t2
2 ( num_type number,
3 float_type binary_float,
4 double_type binary_double
5 );
Table created
插入测试数据1
SQL
SQL insert into t2
2 (num_type, float_type, double_type)
3 values
4 (1234567890.0987654321, 1234567890.0987654321, 1234567890.0987654321);
1 row inserted
查看测试数据1
SQL
SQL select to_char(num_type),
2 to_char(float_type, '999999999999.999999999'),
3 to_char(double_type, '99999999999.9999999999')
4 from t2
5 ;
TO_CHAR(NUM_TYPE) TO_CHAR(FLOAT_TYPE,'9999999999 TO_CHAR(DOUBLE_TYPE,'999999999
--------------------------- -----------------------------------------------------------------------------------
1234567890.0987654321 1234567940.000000000 1234567890.0987654000
oracle精度会自动截取。根据查询相关资料信息显示,ROUND按照指定的精度进行四舍五入,oracle中对查询出来的数据进行自动切割、截取等操作。Oracle中的取精度函数常用的有ROUND函数、TRUNC函数、FLOOR函数和CEIL函数。
假设列名为culm
select * from tableA
where length ( trunc ( to_char(culm) , instr(to_char(culm),'.') ) )=6;
instr(to_char(culm),'.') 这个表示小数点的点号在数值的位置,从这之后截取,然后计算长度,限定为6就可以了
你这个问题很好解决,你这个就是因为数值太大了,数据库就采用科学计数法了。
比如你查询上图结果的Select语句是:
SELECT * FROM table;只要在查询前执行:
col item format 999999999999999999999999999;之后再执行查询语句,应该数值就是你想要的数值了。(PS:999999999999999999999999999这个数值可以根据你列的长度来设置)
希望可以帮助你,望采纳!!