人大金仓数据库KingbaseES 新特性 支持本单精度和双精度浮点数

1.Oracle的单精度和双精度浮点数

结尾无F/f/D/d的是NUMBER类型。 F/f结尾的是BINARY_FLOAT,占32位,是单精度浮点数字数据类型。 D/d结尾的是BINARY_DOUBLE,占64位,是双精度浮点数字数据类型。

file

file

语法说明:

  • +或-表示正值或负值。如果省略符号,则为默认值。
  • 数字是0-9之一
  • E或e表示数字以科学计数法表示。E后边的数字表示指数。指数的范围从-130到125。
  • F或f表示BINARY_FLOAT,该数字是32位单精度浮点数字数据类型。
  • D或d表示BINARY_DOUBLE,该数字是64位双精度浮点数字数据类型。
  • 如果省略F/f或D/d,则数字类型是NUMBER。
  • 后缀F/f或D/d仅支持在浮点数常量中使用,不支持在被转换成NUMBER的字符串中使用。比如,当遇到字符串'9',Oracle如果想要一个NUMBER数值,则会将它转换成数字9,但当遇到'9f'时,Oracle则会转换失败并返回错误。
SQL> create table aa as select -6.123456789012 as a, 25e-06 as b, 123456789e-9f as c, 1.1234567890123456789d as d from dual;
Table created.

SQL> insert into aa values('11.1','22.1234567890',1.1f,2.2d);
1 row created.

SQL> insert into aa values('11.1','22.1234567890','1.1f','2.2d');
insert into aa values('11.1','22.1234567890','1.1f','2.2d')
                                   *
ERROR at line 1:
ORA-01722: invalid number

SQL> insert into aa values('11.1f','22.1234567890',1.1f,2.2d);

insert into aa values('11.1f','22.1234567890',1.1f,2.2d)
                 *
ERROR at line 1:
ORA-01722: invalid number

SQL> select * from aa;
   A          B         C            D
----------      ----------     ----------      ----------
-6.1234568    .000025     1.235E-001   1.123E+000
11.1         22.1234568   1.1E+000     2.2E+000

SQL> describe aa ;
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 A                                 NUMBER
 B                                 NUMBER
 C                                 BINARY_FLOAT
 D                                 BINARY_DOUBLE


SQL> SELECT 1.0f a FROM DUAL;

      A
----------
  1.0E+000

用JDBC连接Oracle,执行
create table aa as select -6.123456789012 as a, 25e-06 as b, 123456789e-9f as c, 1.1234567890123456789d as d from dual;select * from aa;
结果:
     A           B        C             D
----------          ----------    ----------      ----------
-6.123456789012   0.000025   1.12345679   1.1234567890123457

结论:

浮点数前可加+和-,表示正负数值。

支持科学计数法的形式。

浮点数后边添加F/f表示单精度浮点数,添加D/d表示双精度浮点数,不加F/f或D/d,表示是NUMBER类型。

后缀F/f或D/d仅支持在浮点数常量中使用,不支持在被转换成NUMBER的字符串中使用。

Oracle单精度和双精度的浮点显示精确到小数点后几位,跟客户端有关。

2.KES的浮点数

test=# create table TEST1 as select 1e-1 as a, 25e-06 as b, -1.123 as c, 1.1234567890123456789 as d;
SELECT 1
test=# select * from TEST1;
  a  |    b     |   c    |           d
-----+----------+--------+-----------------------
 0.1 | 0.000025 | -1.123 | 1.1234567890123456789
(1 row)

test=# \d aa;
                 Table "public.aa"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 a      | numeric |           |          |
 b      | numeric |           |          |
 c      | numeric |           |          |
 d      | numeric |           |          |
KES V9R1支持以科学计数法表示定点数。

test=# SELECT +6.34F;  
  f
------
 6.34
(1 row)

test=# SELECT 1.0f  a;
ERROR:  syntax error at or near "a"
LINE 1: SELECT 1.0f a;
KES V9R1不支持用F/f/D/d后缀的方式表示单精度或者双精度浮点数,而是当做列别名显示了。

test=# create table aa(a NUMBER(38,8), b NUMBER(38,8), c BINARY_FLOAT, d BINARY_DOUBLE);
CREATE TABLE
test=#
test=# insert into aa values(25e-03,'22.1234567890', 25e-03f,2.2d);
ERROR:  syntax error at or near "f"
test=# insert into aa values( 25e-03,'22.1234567890', 25e-03,2.2);
test=# select * from aa;
      a     |      b     |  c  |  d
-----------------+-----------------+------+-----
  0.02500000 | 22.12345679 | 0.025 | 2.2
(1 row)
test=# \d aa;
                     Table "public.aa"
 Column |      Type      | Collation | Nullable | Default
--------+------------------+-----------+----------+---------
 a      | numeric(38,8)    |           |          |
 b      | numeric(38,8)    |           |          |
 c      | real            |           |          |
 d      | double precision |           |          |

KES V9R1支持创建BINARY_FLOAT、BINARY_DOUBLE类型的列。

3.差异分析

KES已有功能:

1、用+或-表示正值或负值。如果省略符号,则为默认值。

2、数字是0-9之一

3、E或e表示数字以科学计数法表示。E后边的数字表示指数。

4、如果省略F/f或D/d,则数字类型是numeric。

KES需新增的功能:

1、F或f表示BINARY_FLOAT类型,存储单精度的32位浮点数。

2、D或d表示BINARY_DOUBLE类型,存储双精度的64位浮点数。

更多信息,参见https://help.kingbase.com.cn/v8/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值