• 【Teradata SQL】float double decimal和Decfloat区别


    1.简介

    float:称为单精度浮点数,含字节数为4,是实数的 32 位近似值。数值范围为-3.4E38~3.4E38(7个有效位)

    double:称为双精度浮点数,含字节数为8,是实数的 64位近似值。,数值范围-1.7E308~1.7E308(15个或16个有效位)

    decimal:称为十进制数,是一种可以自己定义小数位数的压缩型十进制数。128bit,数值范围-7.9 × 10^28~7.9 × 10^28,常用于银行帐目计算。(28个或29个有效位)

    decimal(a,b)说明:
    decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。 a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。 b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从
    0 到 a之间的值。默认小数位数是 0

    2.使用场景

    2.1凡是跟钱相关的都需要使用 Decimal。

    • Decimal 是精确存储
    • float, double 是近似存储,并不精确

    如果对于既要求精度,又固定小数点位数的数值存储,采用decimal(numeric),优点在于可以自定义小数点位数,精度高。

    如特殊情况,如数值范围巨大只能用float(real)类型了,此类型一般不提倡使用。

    2.2 能用单精度时不要用双精度(以省内存,加快运算速度)

    double 和 float 的区别是double精度高,有效数字15位,float有效数字7位。但double消耗内存是float 的两倍,double的运算速度比float慢得多。  

    2.3 在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用 float 或 real 列。最好限制使用 float 和 real 列做> 或 < 的比较。

    float 类型本身是一种不精确的数据表示方法, 也就是说, 你放一个数据进去, 拿出来的时候可能会存在一点点点误差, 而这点点点误差在做数据比较的时候就会导致数据不一致.

    3.3 float和double的相乘操作,数字溢出不会报错,会有精度的损失。当对decimal类型进行操作时,数值会因溢出而报错。

    3.转换说明

    从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。

    从 int、smallint、float、real向 decimal 或 numeric 转换会导致溢出。主要因为decimal的有效位数很大,但是表示的数据范围却比float和double类型小。

    4.DECFLOAT类型

    DECFLOAT 称为十进制浮点数,是DB2 V9.5 中引入的新数据类型,适合于处理准确的十进制业务。它具有 DECIMAL 类型的准确性,同时又具有浮点数的性能优势(也不需要指定小数位数),特别适合于在处理货币值相关的应用程序中使用。

    DECFLOAT 提供 16 位和 34 位两种精度的浮点数据类型。分别为表示为 DECFLOAT(16) 和 DECFOAT(34)。如果没有指明精度,DECFLOAT 默认为 DECFLOAT(34)。这两种精度的数据分别存储在 8 字节和 16 字节的空间里。

    CREATE TABLE EMPLOYEE (
    SALARY DEC(14,2),
    BONUS DECFLOAT(16),
    COMMISSION DECFLOAT(34)
    );
    INSERT INTO EMPLOYEE VALUES (
    123456.78,
    1234567890.12,
    123456789012345678901234.56
    );

    如果我们插入精度更大的数据,对于 BONUS 和 COMMISSION 这两列,我们不需要作任何更改,而对于 SALARY 列,那就需要修剪数据使得数据符合 DECIMAL 列指明的精度。结果如下:

    INSERT INTO EMPLOYEE VALUES (
    123456.7891,
    1234567890.1234,
    123456789012345678901234.5678
    );

     5.源系统数据类型为decfloat如何入仓?

    (1)STG可以定义为varchar(38),保持源数据接入。

    (2)如果需要进行计算,可以在PDM转换为decimal后进行处理。为避免decimal数据溢出,尽量使用显示转换处理。需要注意根据实际需要定义精度,尽量避免精度损失。如果不需要计算,可以均定义为varchar(38)。

    Sql的decimal、float、double类型的区别

    float、double(浮点数)区别还有和decimal(定点数)的比较

    Decfloat百度百科

    DB2 数据类型

  • 相关阅读:
    【Android N 7.1.1】 屏幕亮和灭的处理地方
    Android 测量调用方法耗时的方法
    【Android M】获取屏幕锁定的相关信息:“无”,“滑动”,“PIN码”,"图案","密码"
    【Android N 7.1.1】 ActivityManagerService 获取cpu状态
    Android 判断当前是否在跑monkey测试
    【Android N 7.1.1】 锁屏之上显示Toast
    【Android N 7.1.1】 处于锁屏界面时可以转屏
    【Android N 7】使用量统计usagestats
    #### 批处理命令 获取当前目录下所有文件的路径
    Linux命令 swap:内存交换空间
  • 原文地址:https://www.cnblogs.com/badboy200800/p/10968991.html
Copyright © 2020-2023  润新知