---
title: Oracle 模式使用浮点数数值数据类型-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 Oracle 模式使用浮点数数值数据类型相关的常见问题和使用技巧，帮助您快速解决 Oracle 模式使用浮点数数值数据类型的难题。
---
切换语言

- 简体中文
- English

划线反馈

# Oracle 模式使用浮点数数值数据类型

更新时间：2026-05-18 09:11

适用版本： V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x 内容类型：TechNote  

OceanBase 数据库专门为 Oracle 模式的浮点数提供了两种数值数据类型： `BINARY_FLOAT` 和`BINARY_DOUBLE`，本文简单介绍这两种类型的使用方式。

## 详细信息

`BINARY_FLOAT` 和 `BINARY_DOUBLE` 支持 NUMBER 数据类型提供的所有基本功能。但是，NUMBER 使用十进制精度，而 `BINARY_FLOAT` 和 `BINARY_DOUBLE` 使用二进制精度，这可以实现更快的算术计算并且通常会降低存储要求。

`BINARY_FLOAT` 和 `BINARY_DOUBLE` 是近似数值数据类型。它们存储十进制值的近似表示，而不是精确表示。例如，值 `0.1` 不能由 `BINARY_DOUBLE` 或 `BINARY_FLOAT` 精确表示。它们经常用于科学计算。它们的行为类似于 Java 中的数据类型 `FLOAT` 和 `DOUBLE`。

有效的浮点数子例如：`1.2`，`-1.1`，`0.` ......

数值数据类型除了提供数字浮点类型外，还提供了正负无穷和非数字 （not a number / NaN） 等特殊表示。

示例。

1. 创建测试表 TEST。

   ```shell
   CREATE TABLE TEST(C1 BINARY_FLOAT,C2 BINARY_DOUBLE);
   Query OK, 0 rows affected (0.077 sec)

   ```
 2. 执行插入语句。

   ```shell
   obclient> INSERT INTO TEST VALUES(BINARY_FLOAT_INFINITY,BINARY_DOUBLE_INFINITY);--- 插入正无穷
   Query OK, 1 row affected (0.010 sec)

   ```

   ```shell
   obclient> INSERT INTO TEST VALUES(-BINARY_FLOAT_INFINITY,-BINARY_DOUBLE_INFINITY);--- 插入负无穷
   Query OK, 1 row affected (0.002 sec)

   ```

   ```shell
   obclient> INSERT INTO TEST VALUES(BINARY_FLOAT_NAN,BINARY_DOUBLE_NAN);--- 插入非数字
   Query OK, 1 row affected (0.003 sec)

   ```
 3. 通过 JDBC 驱动连接 OceanBase 数据库，并在 Oracle 模式下测试浮点数数值数据类型，代码如下：

   ```shell
    import java.sql.*;

    public class con {
        public static void main(String[] args) {
            // 数据库 URL，用户名和密码
            String url = "jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/xxx";
            String user = "xxx";
            String password = "xxx";
            // 用于插入数据的 SQL 语句
            String sql = "INSERT INTO TEST (C1, C2) VALUES (?, ?)";
            try {
                // 建立数据库连接
                Connection conn = DriverManager.getConnection(url, user, password);
                // 创建 PreparedStatement
                PreparedStatement pstmt = conn.prepareStatement(sql);
                // 插入正无穷
                pstmt.setString(1, "INF");
                pstmt.setString(2, "INF");
                pstmt.executeUpdate();
                // 插入负无穷
                pstmt.setString(1, "-INF");
                pstmt.setString(2, "-INF");
                pstmt.executeUpdate();
                // 插入非数字
                pstmt.setString(1, "NAN");
                pstmt.setString(2, "NAN");
                pstmt.executeUpdate();
                // 关闭 PreparedStatement 和连接
                pstmt.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

   ```

## 相关文档

关于 OceanBase 数据库支持的各类数值数据类型的详细介绍，参见 [数值数据类型](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000511172) 。

## 适用版本

OceanBase 数据库 V3.x、V4.x版本，OceanBase 数据库 JDBC 所有版本。

Previous

[OceanBase 数据库暂不支持公元前时间表示](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207702)

Next

[float 类型字段查询结果异常](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001045991) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
