
前两篇帖子介绍了GaussDB数据库中常用数据类型以及使用场景的速查表,接下来介绍一下常用的数据类型中,功能近似的数据类型的对比,本篇帖子先介绍FLOAT和NUMERIC的对比,FLOAT和NUMERIC是两种用于存储数值的数据类型,但它们在精度、存储方式、适用场景和行为上有本质区别。以下是详细对比:
一、基本定义
二、核心区别
1.精度与准确性
NUMERIC(p,s)
p=精度(总位数),s=标度(小数位数)
精确存储,无舍入误差。
例如:NUMERIC(10,2)可精确表示12345678.99。
适用于金钱、财务、科学计数等要求绝对精确的场景。
FLOAT(n)
遵循IEEE754浮点标准(如FLOAT≈32位)。
近似存储,存在舍入误差。
例如:0.1+0.2!=0.3在浮点运算中可能成立(实际结果为0.30000000000000004)。
适用于科学计算、物理模拟、图形处理等允许微小误差的场景。
2.存储空间
NUMERIC:存储空间随数值大小动态变化,通常比FLOAT占用更多空间。
FLOAT:固定长度(FLOAT4字节,FLOAT8字节),存储效率高。
3.性能
FLOAT运算由CPU浮点单元直接支持,速度快。
NUMERIC运算需软件模拟,速度较慢,但保证精确。
4.范围
FLOAT支持极大/极小值(如1e308),适合天文、物理数据。
NUMERIC范围受限于声明的精度(如NUMERIC(1000,100)可存超大数,但需预先定义)。
三、使用建议
四、示例
--精确存储价格
CREATE TABLE products(
Id SERIAL,
Price NUMERIC(10,2)--如99999999.99
--近似存储温度
CREATE TABLE sensors(
Id SERIAL,
Temperature FLOAT--如36.6,但可能存为36.599998...
SELECT 0.1::FLOAT+0.2::FLOAT;--结果可能是0.30000000000000004
SELECT 0.1::NUMERIC+0.2::NUMERIC;--结果严格等于0.3
五、总结
口诀:“钱用NUMERIC,数用FLOAT”——涉及金钱必选精确类型!
以上内容均为本人学习 GaussDB 过程中,针对实操遇到的问题、学习产生的疑惑所做的个人总结与经验梳理,初衷是希望能为同路学习者提供一点参考和帮助。内容仅作交流学习之用,若有疏漏或不当之处,欢迎大家指正交流。
本文由 le就这样吧 原创 发布于 社区,未经作者许可,禁止转载。
点击小程序查看更多内容