Oracle中较长number型数值的科学计数显示问题

表中有id列,类型为number(38)。在sqlplus中查询的时候,查询结果的显示方式为科学计数法:

        ID
----------
4.5572E+18
4.5574E+18
4.5585E+18

这样看起来很不直观,而之所以这样显示的原因是在SQL*Plus下,小于等于10位的精度显示的是很直观的形式,大于10位精度的则显示为科学计数的形式。

以下为测试内容:

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL> create table test(id number(20));
SQL> insert into test values(123456789);
SQL> insert into test values(1234567890);
SQL> insert into test values(12345678901);
SQL> commit;

Commit complete.

SQL> select id from test;

        ID
----------
 123456789
1234567890
1.2346E+10

SQL> select id from test where id=1234567890;

        ID
----------
1234567890

SQL> select id from test where id=12345678901;

        ID
----------
1.2346E+10

SQL>

避免使用科学计数法显示的方法:

1.使用set numwidth

SQL> set numwidth 11
SQL> select id from test where id=12345678901;

         ID
-----------
12345678901

SQL>

  

2.将number转成char类型

SQL> select to_char(id) from test where id=12345678901;

TO_CHAR(ID)
----------------------------------------
12345678901

SQL>

  

Toad和PL/SQL Developer也会存在这样的显示问题,默认情况下这两个工具的numwidth设置都是15,也给我们带来了一些不变,可以通过以下方法:
在toad中->view->option->data->display large number in scientific notation,不选择该选项
在pl/sql developer中->tools->preferences->sql windows->number fields tochar,选中该选项

时间: 2024-10-12 07:41:16

Oracle中较长number型数值的科学计数显示问题的相关文章

导出EXCEL数据时防止数值变科学计数的办法

网上有很多说法,最简单直接正确的做法是判断一下是否为数值以及长度,然后给单元格加上以下CSS即可: mso-generic-font-family:auto;   mso-font-charset:134;    mso-number-format:"\@";   mso-background-source:auto;   mso-pattern:auto; 这个办法我是从:http://www.cnblogs.com/joinger/articles/1322931.html 这个博

查看Oracle中存储过程长时间被卡住的原因

1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0'; 注意:CUX_OE_ORDER_RPT_PKG 为存储过程的名称. 发现 locks=2 2:按对象查出sid的值 select /*+ rule*/  SID from V$ACCESS WHERE object='CUX_OE_ORDER_RPT_PKG'; 注意:CUX_OE_ORDER

mysql 导出过长的数字列时变科学计数法问题解决办法

--mysql 导出数据时,  数字类型的列如果位数过长,变为科学技术发问题 concat('\t',a.IDCARD_NO) 例子: select   concat('\t',a.IDCARD_NO)   from   表a  as  a

JavaScript中科学计数法转化为数值字符串形式

原文地址:https://www.css88.com/archives/9318(受益匪浅) JavaScript 中经常会碰到数值计算问题,偶尔会在不经意间报一个不是bug的bug.今天来说说一个特殊的例子.我以0.0011BTC 价格买入 0.0002CZR 计算出了的金额是 0.00000022BTC,而 JavaScript 计算出来的金额是 2.2e-7 .值是对的,只是用了科学计数法,也是数值类型.但是问题来了,一般用户用户看不懂 2.2e-7,那么就把它转换成 0.00000022

oracle中int类型和number类型区别

INT类型是NUMBER类型的子类型.下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数.假设定义SAL列为NUMBER(6,2)则整数最大位数为4位(6-2=4),而小数最大位数为2位.(2)INT类型当定义整数类型时,可以直接使用NUMBER的子类型INT,顾名思义:INT用于整型数据. oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集.int类型只能

oracle中的number类型

number 数据类型 number (precision,scale) a)    precision表示数字中的有效位,如果没有指定precision的话,oracle将使用38作为精度: b)    如果scale大于零,表示数字精度到小数点右边的位数:scale默认设置为0:如果scale小于零,oracle将把该数字取舍到小数点左边的指定位数. c)    Precision 的取值范围是[1-38];scale的取值范围是[-84-127]. d)    Number整数部分允许的长

ORACLE 中NUMBER 类型 低精度转换成高精度

例如: 表User中有一个字段 salary  Number(10,3), 如果想把字段salary的类型提高精度到salary  Number(10,6),保留六位小数, 解决办法:1,ALTER TABEL USER MODIFY SALARY NUMBER(13,6); 解释:number类型刚开始是,长度10位,3位小数,如果想增加3位小数,对应的长度也必须增加,否则无法修改.所以NUMBER(13,6);这样就可以提高精度了, ORACLE 中NUMBER 类型 低精度转换成高精度

PHP长整型在32位系统中强制转化溢出

CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机器32位系统中,B机器64系统中.如今的问题是64系统中页面訪问正常.32位系统中訪问出错了.原因是php整形溢出. 1 A机器演示 1.1 获取A机器系统位数 # getconf LONG_BIT 1.2 整形转化代码 <? php $id = 5147486396; echo '$id:'.$i

计算int 型数值在内存中二进制1的个数

今天在华为OJ上遇到这么一个题目,很简单,但是却总是得不到最好的成绩记录.因此比较了自己的程序.思路与别人的异同,发现还是有很大区别的,遂记录如下. 题目-- 输入一个int型整数,求该整数的二进制在内存中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 思路1 <span style="font-size:18px;">public static void main(String[] args) { Scanner scanner = new