`
jiujiubuzui
  • 浏览: 73350 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

小数点前的0的显示问题

 
阅读更多

 在处理数据时发现一个问题,Oracle对于小于1的小数,小数点前面的0是不显示的。
 
SQL> create table t1_number (num number);
Table created
 
SQL> insert into t1_number values(0.3268);
1 row inserted
 
SQL> insert into t1_number values(0.57965686);
1 row inserted
 
SQL> insert into t1_number values(52345234.5686);
1 row inserted
 
SQL> insert into t1_number values(4.552686);
1 row inserted
 
SQL> commit;
Commit complete
 
SQL> column num format 99999999999.9999999999999
SQL> select * from t1_number;
 
                       NUM
--------------------------
            .3268000000000
            .5796568600000
    52345234.5686000000000
           4.5526860000000
 
 
 
    使用PL/SQL DEV工具查看时是有前面的0的
    通过column num format 000000000000.99999999999设置也可以显示前面的0
 
    但是这些都只是显示的结果,而不是数据库保存结果
 
SQL> column num format 00000000000.9999999999999
SQL> select * from t1_number;
 
                       NUM
--------------------------
 00000000000.3268000000000
 00000000000.5796568600000
 00052345234.5686000000000
 00000000004.5526860000000
 00000000005.2920000000000
 
SQL> select substr(num,1,1) from t1_number;
 
SU
--
.
.
5
4
5
 
    可以看到,无论前面出现多少位,通过substr函数获取的第一位任然是'.'
 
 
    无论怎么转换,只要最终输出结果是数值型的,小数点前的0必然被丢弃,所以只有将数值转换为字符型,大致有两种方法:
 
 
1、直接使用to_char函数
 
    首先实验一下将小数点前和小数点后都加上99999999的格式:
 
SQL> select to_char(num,'999999999.999999999') from t1_number;
 
TO_CHAR(NUM,'9999999
--------------------
          .326800000
          .579656860
  52345234.568600000
         4.552686000
         5.292000000
 
    发现小数点前还是没有0,而小数点后的0多出来了
    再实验一下小数点前和小数点后都加上0000000000格式:
 
SQL> select to_char(num,'00000000000.000000000') from t1_number;
 
TO_CHAR(NUM,'000000000
----------------------
 00000000000.326800000
 00000000000.579656860
 00052345234.568600000
 00000000004.552686000
 00000000005.292000000
 
    发现小数点前是有0了,但是两边的0都多出来了,使用FM来去掉多于的0:
 
SQL> select to_char(num,'fm00000000000.000000000') from t1_number;
 
TO_CHAR(NUM,'FM0000000
----------------------
00000000000.326800000
00000000000.579656860
00052345234.568600000
00000000004.552686000
00000000005.292000000
 
    没有效果,说明FM只能去掉用9表示的格式中产生的0:
 
SQL> select to_char(num,'fm999999999.999999999') from t1_number;
 
TO_CHAR(NUM,'FM99999
--------------------
.3268
.57965686
52345234.5686
4.552686
5.292
 
    但是这样还是没有0,最后发现可以将小数点前的第一位置为0即可(注意9的个数要大于数值的位数):
 
SQL> select to_char(num,'fm999999990.999999999') from t1_number;
 
TO_CHAR(NUM,'FM99999
--------------------
0.3268
0.57965686
52345234.5686
4.552686
5.292
 
    检查一下第一位,没有问题:
 
SQL> select substr(to_char(num,'fm999999990.999999999'),1,1) from t1_number;
 
SU
--
0
0
5
4
5
 
 
2、使用decode函数
 
    既然小于1的小数首位必然是'.',那就判断首位是否为'.',是则在前面加上'0'即可
 
SQL> select decode(substr(num,1,1),'.','0'||num,num) from t1_number
 

DECODE(SUBSTR(NUM,1,1),'.','0'||NUM,NUM)
-----------------------------------------
0.3268
0.57965686
52345234.5686
4.552686
5.292
 
    同样检查一下第一位,没有问题
 
SQL> select substr(decode(substr(num,1,1),'.','0'||num,num),1,1) fro
m t1_number;
 
SU
--
0
0
5
4
5
 
 
    也可以写个函数来判断一下,不过可以用decode直接出来,感觉也没什么必要,暂时就这些吧。

分享到:
评论

相关推荐

    Excel保留小数点,小数为0时不显示0,显示为整数.pdf

    Excel保留小数点,小数为0时不显示0,显示为整数 Excel 中的数字格式控制是一个非常重要的功能,特别是在财务、科学计算等领域中,小数点的显示和隐藏对数据的精度和美观性都有着重要的影响。在这个知识点中,我们...

    ABAP ALV取消整数小数点后面的0

    然而,在某些情况下,ALV表格可能会遇到一个特定的显示问题,即对于整数字段,它会默认显示一个小数点后跟三个零,即使数值本身是整数,例如11会被显示为11.000。这种显示方式可能不符合用户的期望,尤其是在字段可...

    51单片机教程实例34-显示小数点

    七段数码管通常用于表示0-9的数字,通过控制每个段的亮灭来显示数字。小数点是另外独立的一个点,需要单独控制。 首先,我们需要理解数码管的驱动方式。常见的驱动方式有静态驱动和动态驱动。静态驱动简单易懂,每...

    基于oracle小数点前零丢失的问题分析

    本文主要探讨的是在处理小于1的小数时,使用`CHAR`类型可能导致小数点前的零被丢失的问题,以及如何通过`TO_CHAR`函数来解决这个问题。 首先,我们要了解问题的起源。当Oracle数据库中的字段用于存储小于1的小数,...

    Excel保留小数点小数为0时不显示0显示为整数.pdf

    Excel 是一个功能强大且广泛使用的电子表格软件,但是在实际应用中,我们经常会遇到一些小问题,例如保留小数点小数为0时不显示0显示为整数的问题。在本文中,我们将探讨如何使用 Excel 的条件格式设置来解决这个...

    Excel保留小数点小数为0时不显示0显示为整数.doc

    在 Excel 中,我们可以使用条件格式和 ROUND 函数来解决保留小数点小数为 0 时不显示 0 显示为整数的问题。同时,我们也可以使用 IF 函数来判断结果是否为整数,以达到我们想要的结果。 在阅读完毕后,希望您提出...

    单片机怎么显示小数点?数码管小数点显示程序

    一个实用的程序例子是通过程序控制数码管显示0到999的数字,并且使得每一位数都显示小数点。程序中定义了显示段码值和位码数组,通过位码数组选择数码管,通过段码数组控制显示的数字。例如,要显示数字2.5,就需要...

    真正解决小数点问题

    在编程和数据处理中,小数点问题是一个常见的困扰,特别是在用户输入、数据存储和显示环节。"真正解决小数点问题"这个标题所指的知识点主要集中在如何确保小数的完整性和正确性,避免诸如0.7变成.7,1变成1.这类意外...

    34-显示小数点.rar 51单片机基础例程

    通过改变这些引脚的电平,可以显示出0到9的数字以及特殊字符如小数点。 在实际编程中,我们可能需要定义一个段码表,将每个数字对应的7段码存储在一个数组中。然后,根据要显示的数字和小数点的状态,更新对应的...

    stc 单片机ad转换数码管显示 (带小数点)

    2. 数码管显示更新:将AD转换得到的数值分割成整数和小数部分,然后分别送入数码管的段控线,同时控制小数点的显示状态。 3. 定时器设置:题目中提到了"50us定时",这可能是用于刷新数码管显示的定时器设定,确保...

    Excel保留小数点,小数为0时不显示0,显示为整数.doc

    Excel 中保留小数点,零值不显示,小数点自动隐藏 在 Excel 中,我们经常需要对小数进行保留和格式化,以满足特定的业务需求。例如,在财务报表中,我们需要保留两位小数,但当小数部分为零时,不显示零值。今天,...

    TM1638 按键数码管模块(带小数点)

    通过单片机发送指令,TM1638可以独立控制每个数码管的8个段和2个小数点,实现0-9、A-F等字符显示。 - **按键处理**:TM1638内部集成了按键扫描电路,通过单片机读取按键状态,可以识别8个独立按键的按下或释放。 2...

    labview小数至字符串转化时去掉无效0和小数点.vi

    labview小数至字符串转化时去掉无效0和小数点函数,labview2013以上版本可以打开。

    Android 带小数点的字符串格式化为固定位数

    在Android开发中,数据的格式化是一个非常重要的环节,特别是在显示数字时,为了保持数据的一致性和可读性,我们经常需要将带有小数点的字符串格式化为固定位数。这个工具类就是为了满足这样的需求而设计的。下面将...

    为淘宝4位串行595数码管模块写的操作函数(设置小数点,设置闪烁,指定哪位显示什么)

    //x范围0-4,设置点亮小数点,为0时全部小数点不亮 setsanshuo(0);//x范围0-4,设置数码管闪烁,为0时不闪烁 setdisplay(1,4);//括号里左边1-2选择哪位数码管显示,右边0-9是定义显示的值,大于9不亮 setdisplay(2,5);...

    c#中的 小数点分析 textbox避免两个小数点

    这样,无论用户输入多少个小数点,TextBox最终只会显示一个。 另外,我们还可以考虑更复杂的场景,比如限制小数位数或者不允许输入非数字字符。这可以通过正则表达式实现,例如: ```csharp private void textBox1...

    单片机C语言实例显示小数点.rar

    例如,如果我们要显示数字4(其二进制编码为0b0100),并在其后显示小数点,我们应将0x80(即10000000的二进制形式)与数字编码相或(|),得到0b01001000(即0x84)。这样,数码管的第八段(对应小数点)将被点亮。...

    android 开发,editText中控制金额字段输入小数点前面位数

    如果小数点前的数字超过了设定的最大位数,可以返回一个空字符串,这样用户输入的字符就不会显示在`EditText`中。同时,要处理小数点和负号的特殊情况,确保它们的正确输入。 示例代码可能如下: ```java public ...

    用DS18B20精确到小数点后一位的温度测量实现

    DS18B20的温度读数是以二进制形式存储在内部寄存器中的,每个温度值由9位组成,前8位表示整数部分,最后一位(第9位)表示小数部分,其单位为0.0625°C。例如,+25.0625°C的十六进制表示为0x0191,其中0x01代表整数...

Global site tag (gtag.js) - Google Analytics