float、double 这类 浮点数 相比,DECIMAL 是另一种完全不同的数值类型

news2025/6/7 2:35:40

floatdouble 这类**“浮点数”**相比,DECIMAL 是另一种完全不同的数值类型,叫做:


DECIMAL 是什么?

DECIMAL 是“定点数”类型(fixed-point),用于存储精确的小数值,比如:

  • 金额(¥9.99)
  • 利率(0.035%)
  • 库存数量(精确到 0.001)

✅ 举个例子说明区别

我们用 银行转账来打比方:

类型举例精度有可能出错?适合场景
FLOAT0.1 + 0.2 = ?不能完全精确✅ 有误差!科学计算、图像、AI
DECIMAL0.1 + 0.2 = 0.3精确计算❌ 不会错!金融、电商、财务
-- DECIMAL 精确计算:适合金融等场景
SELECT 0.1 + 0.2;               -- 结果:0.3(如果是 DECIMAL 类型)

-- FLOAT 浮点误差(某些数据库/语言里)
SELECT CAST(0.1 AS FLOAT) + CAST(0.2 AS FLOAT);  
-- 结果:0.30000000000000004 (可能)

✅ 语法说明(以 MySQL 为例)

DECIMAL(M, D)
  • M:总位数(精度)
  • D:小数位数(scale)

举例:

DECIMAL(10, 2)   -- 最多存储 10 位数,其中 2 位是小数,比如:99999999.99
DECIMAL(5, 0)    -- 只能存整数,最多 99999

✅ 和 float 的区别总结

特性DECIMALFLOAT / DOUBLE
精度控制高,精确低,存在误差(特别是小数)
占用空间相对更大更节省内存
性能稍慢更快(特别是在大数据/向量计算中)
使用场景金融、电商、财务等科学计算、统计、图形渲染等

✅ Python 和 SQL 中的对比图(数值类型)

类型名称精度内存精度是否安全场景说明
float~74字节❌ 可能误差科学、图形
double / float64~158字节❌ 精度有限AI、科学建模
decimal.Decimal(Python)任意可控✅ 精确计算金融、电商
DECIMAL(M,D)(SQL)精确✅ 精确控制金融、发票、钱币计算

✅ 总结一句话

DECIMAL 是为**“精确计算”而设计的数值类型**,特别适合表示 钱、利率、精度要求高的值;它和 float/double 不同,不会产生误差,但性能稍慢、占内存更大。


  • DECIMAL 在 Python 中怎么用(用 decimal.Decimal
  • DECIMAL 在 MySQL 中创建表怎么写
  • 怎么选用 DECIMAL vs FLOAT 在一个项目里

我们从 Python 和 SQL 实战 两部分,来深入看看 DECIMAL 的用法和典型应用场景。

🧠 第一部分:Python 中的 decimal.Decimal 用法

✅ 为什么要用 decimal.Decimal

Python 默认的 float 类型是二进制浮点数,有误差:

print(0.1 + 0.2)  # 输出:0.30000000000000004 ❌

如果你在做财务、支付金额等场景,这种误差是不能接受的!


✅ 正确做法:使用 decimal.Decimal

from decimal import Decimal, getcontext

getcontext().prec = 10  # 设置精度(可选)

a = Decimal('0.1')
b = Decimal('0.2')
c = a + b

print(c)  # ✅ 输出:0.3

注意:不要传 Decimal(0.1),要传 '0.1' 字符串,否则误差还是会传染。


✅ Decimal 的实际例子:金额结算

from decimal import Decimal

unit_price = Decimal('199.99')
quantity = Decimal('3')
tax_rate = Decimal('0.07')

subtotal = unit_price * quantity
tax = subtotal * tax_rate
total = subtotal + tax

print("总金额:", total)  # ✅ 精确金额计算

🧠 第二部分:SQL(MySQL)中 DECIMAL 的使用

✅ 表结构定义示例

CREATE TABLE orders (
  id INT PRIMARY KEY,
  product_name VARCHAR(100),
  price DECIMAL(10, 2),   -- 价格最多 99999999.99,保留 2 位小数
  tax_rate DECIMAL(4, 3)  -- 比如 0.075 (7.5%)
);

✅ 插入数据

INSERT INTO orders (id, product_name, price, tax_rate)
VALUES (1, 'iPhone 15', 9999.99, 0.075);

✅ 精确计算金额(防止浮点误差)

SELECT
  product_name,
  price,
  tax_rate,
  ROUND(price * tax_rate, 2) AS tax,
  ROUND(price + (price * tax_rate), 2) AS total
FROM orders;

🧠 第三部分:什么时候选 DECIMAL vs FLOAT

场景推荐类型理由
金额、会计、发票等金融应用DECIMAL要求精确到分,浮点误差无法接受
科学计算 / AI / 图形渲染FLOAT / DOUBLE追求性能,不怕少许精度误差
用户评分(比如评分4.6分)DECIMAL(2,1)FLOAT都可以,用 DECIMAL 更稳
坐标、距离、角度、物理量FLOAT通常不需要那么精确,追求速度

✅ 小结:一句话对比

DECIMAL 是精准,适合钱;FLOAT 是高性能,适合科学。
如果你要存 9.99 元,请用 DECIMAL(5,2)
如果你要算宇宙中恒星的位置,请用 float64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信刚需,AI联手ethernet/ip转profinet网关打通工业技术难关

工业人工智能:食品和饮料制造商的实际用例通信刚需 了解食品饮料制造商如何利用人工智能克服业务挑战 食品和饮料制造商正面临劳动力短缺、需求快速变化、运营复杂性加剧以及通胀压力等挑战。如今,生产商比以往任何时候都更需要以更少的投入实现更高的…

JavaEE->多线程:定时器

定时器 约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见) 客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里“等待的最大时间”可以用定时…

<el-table>构建树形结构

最佳实践 el-table实现树形结构主要依靠row-key和tree-props来实现的。 &#x1f4ab; 无论是el-table实现的树形结构还是el-tree组件都是绑定的树形结构的数据&#xff0c;因此如果数据是扁平的话&#xff0c;需要进行树化。 代码 <template><div><el-table:d…

linux——磁盘和文件系统管理

1、磁盘基础简述 1.1 硬盘基础知识 硬盘&#xff08;Hard Disk Drive&#xff0c;简称 HDD&#xff09;是计算机常用的存储设备之一. p如果从存储数据的介质上来区分&#xff0c;硬盘可分为机械硬盘&#xff08;Hard Disk Drive, HDD&#xff09;和固态硬盘&#xff08;Soli…

云原生 DevOps 实践路线:构建敏捷、高效、可观测的交付体系

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;DevOps 与云原生的深度融合 在传统软件工程范式下&#xff0c;开发与运维之间存在天然的壁垒。开发希望尽快…

gateway 网关 路由新增 (已亲测)

问题&#xff1a; 前端通过gateway调用后端接口&#xff0c;路由转发失败&#xff0c;提示404 not found 排查&#xff1a; 使用 { "href":"/actuator/gateway/routes", "methods":[ "POST", "GET" ] } 命令查看路由列表&a…

Python 训练营打卡 Day 33-神经网络

简单神经网络的流程 1.数据预处理&#xff08;归一化、转换成张量&#xff09; 2.模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 3.定义损失函数和优化器 4.定义训练过程 5.可视化loss过程 预处理补充&#xff1a; 分类任务中&#xff0c;若标签是整…

如何有效删除 iPhone 上的所有内容?

“在出售我的 iPhone 之前&#xff0c;我该如何清除它&#xff1f;我担心如果我卖掉它&#xff0c;有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后&#xff0c;你如何处理旧 iPhone&#xff1f;你打算出售、以旧换新还是捐赠&#xff1f;无论你选择哪一款&am…

AI大模型学习三十二、飞桨AI studio 部署 免费Qwen3-235B与Qwen3-32B,并导入dify应用

一、说明 ‌Qwen3-235B 和 Qwen3-32B 的主要区别在于它们的参数规模和应用场景。‌ 参数规模 ‌Qwen3-235B‌&#xff1a;总参数量为2350亿&#xff0c;激活参数量为220亿‌。‌Qwen3-32B‌&#xff1a;总参数量为320亿‌。 应用场景 ‌Qwen3-235B‌&#xff1a;作为旗舰模型&a…

操作系统中的设备管理,Linux下的I/O

1. I/O软件分层 I/O 层次结构分为五层&#xff1a; 用户层 I/O 软件设备独立性软件设备驱动程序中断处理程序硬件 其中&#xff0c;设备独立性软件、设备驱动程序、中断处理程序属于操作系统的内核部分&#xff0c;即“I/O 系统”&#xff0c;或称“I/O 核心子系统”。 2.用…

LabVIEW与Modbus/TCP温湿度监控系统

基于LabVIEW 开发平台与 Modbus/TCP 通信协议&#xff0c;设计一套适用于实验室环境的温湿度数据采集监控系统。通过上位机与高精度温湿度采集设备的远程通信&#xff0c;实现多设备温湿度数据的实时采集、存储、分析及报警功能&#xff0c;解决传统人工采集效率低、环境适应性…

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强 简介 GitHub MCP (Machine Coding Protocol) 是一种强大的工具,能够自动化代码生成、管理和分析,从而显著提升开发效率。本文将全面介绍 GitHub MCP 的安装、配置、使用以及如何将其融入您的工作流。 本文介绍两种…

自主设计一个DDS信号发生器

DDS发生器 DDS信号发生器是直接数字频率合成技术&#xff0c;采用直接数字频率合成(Direct Digital Synthesis&#xff0c;简称DDS)技术&#xff0c;把信号发生器的频率稳定度、准确度提高到与基准频率相同的水平&#xff0c;并且可以在很宽的频率范围内进行精细的频率调节。采…

鸿蒙UI(ArkUI-方舟UI框架)- 使用弹框

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文章目录 弹框概述使用弹出框(Dialog)弹出框概述不依赖UI组件的全局自定义弹出框(openCustomDialog)(推荐)生命周期自定义弹出框的打开与关闭更新自定义弹出框内容更新自定义弹出框的属性完整示例 基础自定义弹…

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2] 学习机器学习&#xff0c;需要学习如何预处理原始数据&#xff0c;这里用到pandas&#xff0c;将原始数据转换为张量格式的数据。 学习笔记(23): 机器学习之数据预处理Pandas和转换成张量格式[1]-CSDN博客 下面…

在不同型号的手机或平板上后台运行Aidlux

在不同型号的手机或平板上后台运行Aidlux 一、鸿蒙/HarmonyOS手机与平板 二、小米手机与平板 三、OPPO手机与平板 四、vivo手机与平板 一、鸿蒙/HarmonyOS手机与平板 &#xff08;系统版本有差异&#xff0c;但操作原理相通&#xff09; 第一步&#xff1a;点击设置——应用和…

【SSM】SpringBoot学习笔记1:SpringBoot快速入门

前言&#xff1a; 文章是系列学习笔记第9篇。基于黑马程序员课程完成&#xff0c;是笔者的学习笔记与心得总结&#xff0c;供自己和他人参考。笔记大部分是对黑马视频的归纳&#xff0c;少部分自己的理解&#xff0c;微量ai解释的内容&#xff08;ai部分会标出&#xff09;。 …

1.企业可观测性监控三大支柱及开源方案的横评对比

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] &#x1f4e2; 大家好&#xff0c;我是 WeiyiGeek&#xff0c;一名深耕安全运维开发&#xff08;SecOpsDev&#xff09;领域的技术从业者&#xff0c;致力于探索DevOps与安全的融合&#xff08;De…

双空间知识蒸馏用于大语言模型

Dual-Space Knowledge Distillation for Large Language Models 发表&#xff1a;EMNLP 2024 机构&#xff1a;Beijing Key Lab of Traffic Data Analysis and Mining 连接&#xff1a;https://aclanthology.org/2024.emnlp-main.1010.pdf 代码&#xff1a;GitHub - songmz…

OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建一个 基于最小特征值&#xff08;Minimum Eigenvalue&#xff09;的角点响应计算对象&#xff0c;这是另一种经典的角点检测方法&…