postgresql中的各种浮点型小数精度区别

ops/2024/12/22 20:36:03/

postgresql_0">postgresql中的各种浮点型小数精度区别

在PostgreSQL中,FLOAT、NUMERIC(或DECIMAL)和REAL是三种不同的数据类型,它们各自有不同的用途和特性。不过,需要注意的是,PostgreSQL标准数据类型中并没有直接命名为FLOAT的类型,但通常FLOAT可以看作是对REAL或DOUBLE PRECISION的泛称,具体取决于上下文。然而,为了清晰起见,我将分别解释REAL、DOUBLE PRECISION和NUMERIC(或DECIMAL)。

REAL

定义:REAL是单精度浮点数据类型,它占用4个字节的存储空间。
用途:适用于需要浮点数但不需要很高精度的场景。由于它是单精度,因此相对于双精度(DOUBLE PRECISION),它在表示范围和精度上都有所限制。
注意:由于REAL是以近似值的形式存储数据,因此在进行复杂的数学运算或需要精确表示小数时可能不是最佳选择。

DOUBLE PRECISION

定义:DOUBLE PRECISION是双精度浮点数据类型,它占用8个字节的存储空间。
用途:是PostgreSQL中浮点数的默认类型(如果你只声明了一个浮点类型而不指定精度),适用于需要高精度浮点数的场景。
与REAL的比较:DOUBLE PRECISION在表示范围和精度上都优于REAL,但相应地也占用了更多的存储空间。

NUMERIC 或 DECIMAL

定义:NUMERIC和DECIMAL是等价的数据类型,用于存储精确的小数数值。它们可以指定精度(总位数)和小数位数。
用途:适用于需要精确表示小数的场景,如货币计算、科学计算等。
与浮点型的比较:与REAL和DOUBLE PRECISION不同,NUMERIC和DECIMAL类型是以精确值的形式存储数据,因此不会出现浮点数常见的舍入误差问题。但是,由于它们是精确存储,因此在处理大量数据时可能会比浮点数更慢,且占用更多的存储空间。

总结

如果你的应用场景需要高精度但不需要非常精确的小数表示,且对存储空间有一定要求,那么REAL或DOUBLE PRECISION可能是更好的选择。
如果你的应用场景需要精确表示小数,如货币计算,那么NUMERIC或DECIMAL是更好的选择。
在选择数据类型时,应考虑到数据的表示范围、精度要求、存储空间和性能之间的权衡。


http://www.ppmy.cn/ops/110307.html

相关文章

Git 提取和拉取的区别在哪

1. 提取(Fetch) 操作说明:Fetch 操作会从远程仓库下载最新的提交、分支信息等,但不会将这些更改合并到你当前的分支中。它只是将远程仓库的更新信息存储在本地,并不会自动修改你当前的工作区。 使用场景: …

Linux驱动.之platform平台总线驱动框架(二),正点原子

第五十四章 platform设备驱动实验 我们在前面几章编写的设备驱动都非常的简单,都是对IO进行最简单的读写操作。像I2C、SPI、LCD等这些复杂外设的驱动就不能这么去写了,Linux系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件…

第143天:内网安全-权限维持自启动映像劫持粘滞键辅助屏保后门WinLogon

案例一: 权限维持-域环境&单机版-自启动 自启动路径加载 路径地址 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\ ##英文C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动\ ##中文…

剖析Cookie的工作原理及其安全风险

Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话,引入了Cookie机制。 1. Cookie定义 Cookie,也…

谷歌GMS认证之手机的AACT测试,AACT测试与车机Android Auto认证有什么区别?AACT测试流程介绍

一、什么是谷歌GMS认证AACT测试? AACT全称是Android Auto connectivity test (AACT),即安卓自动连接测试,是手机产品在做谷歌GMS认证的时候,其中的一项测试项,AACT是安卓14开始才有的测试项,也就是说是新增…

二进制方式部署K8s高可用集群

1 二进制方式部署K8s高可用集群 1.1 kubeadm 和二进制安装 k8s 适用场景分析 kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速…

TESSY创建需要手写桩的测试用例

如果需要让桩函数有额外的功能,如:传参检测、局部数据处理、多传参检测、函数实现变更等,可以进行手写桩。 我们以tessy5.1 IDE为例,给大家展示编写一个需要手写桩的测试用例过程。 1、前期的准备工作 可以参考以下文章&#xff1…

[ESP32]:如何在micropython中添加C库

[ESP32]:如何在micropython中添加C库 本文将描述如何在micropython中添加一个基于c语言的led模块。 1.编写c驱动 选择一个目录:examples/usercmodule,建立对应的驱动文件hw_led: . ├── cexample │ ├── examplemodule…