当前位置: 首页 > ds >正文

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

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, getcontextgetcontext().prec = 10  # 设置精度(可选)a = Decimal('0.1')
b = Decimal('0.2')
c = a + bprint(c)  # ✅ 输出:0.3

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


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

from decimal import Decimalunit_price = Decimal('199.99')
quantity = Decimal('3')
tax_rate = Decimal('0.07')subtotal = unit_price * quantity
tax = subtotal * tax_rate
total = subtotal + taxprint("总金额:", 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);

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

SELECTproduct_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.xdnf.cn/news/12459.html

相关文章:

  • 【地图 - 问题】公司etm地图:聚合功能重复添加,导致图标重复添加,导致部分重复添加的图标无法清除
  • 计算机组成原理(计算篇)
  • AIGC赋能前端开发
  • 多进程与多线程:核心差异与实战选择
  • AIGC-SD3、控制
  • 在亚马逊选品时,可依托数据驱动的关键词分析体系
  • vue2.0高频面试题汇总--持续更新
  • 基于STM32的DS18B20温度远程监测LCD1602显示
  • Vue3.5 企业级管理系统实战(二十三):权限指令
  • 【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】
  • 根据指定日期和cron表达式生成下一周期的执行时间
  • C++类二
  • 吞咽与营养并重:进行性核上性麻痹患者的饮食管理方案
  • 龙虎榜——20250605
  • ubuntu安装NVIDIA驱动没有网络
  • 【GESP真题解析】第 12 集 GESP 三级 2024 年 6 月编程题 1:移位
  • Spring Cloud 2025 正式发布,你的灾难要来了
  • 系统思考持续训练
  • 前端面试题之浏览器存储技术Cookie、LocalStorage、SessionStorage、indexDB
  • FEMFAT许可管理软件推荐
  • js 比较两个对象的值,不相等就push对象的key
  • 图像去雾数据集总汇
  • Python基于方差-协方差方法实现投资组合风险管理的VaR与ES模型项目实战
  • Qt/C++学习系列之QButtonGroup的简单使用
  • w10激活方法
  • Linux免杀方案汇总(C语言)
  • 【cmder】--- Windows 下 cmder 经典常用快捷键 显著提高效率
  • 第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap
  • 是否存在路径(FIFOBB算法)
  • JupyterNotebook全能指南:从入门到精通