惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
博客园_首页
J
Java Code Geeks
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
量子位
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
B
Blog
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI

博客园 - PanPan003

AI coding - rewind、undo 撤销操作 如何省token? - 项目 知识 固化 如何省token?--- RTK ,input 数据压缩 如何省token?--- ignore文件 如何省token?--- token 用量统计 如何省token? - 何时开启新session? 如何省token? - 更便宜的模型 处理低风险任务 如何省token?-- 如何提问?避免直接粘贴 大段文件 如何省token?- Plan ,任务拆分,从小模型开始 如何省token?-rewind(todo) 如何省token?- handoff (todo) 如何省token? - compact,压缩上下文 Skill - superpowers skill - mattpocock OpenCode 安装 claude code 安装 npm config AI - coding - links/summary SSH 本地端口转发 --- VM中ubuntu service 可被 Windows 访问 内网穿透 - devtunnel Linux 虚拟机 反向代理 - 到宿主机 - python environment settings xUnit Theory: Working With InlineData, MemberData, ClassData docker network - container networking KEDA — Kubernetes Based Event Driven Auto scaling(转载) rabbit MQ —— ha-sync-mode. message 同步/ 丢失 in new pods rabbit MQ —— ha-mode, message 同步策列:所有nodes or one nodes 博文阅读密码验证 - 博客园 Kubernetes hpa container scale up/ down 原理 in kubernetes
decimal, double在 c#中的区别
PanPan003 · 2026-03-09 · via 博客园 - PanPan003

一句话总结

  • double二进制浮点(IEEE 754,64 位),速度快、范围大,但对十进制小数(比如货币)有不可避免的精度误差。适合科学计算、图形、向量、概率、机器学习、物理仿真等。
  • decimal十进制浮点(128 位,28–29 位有效十进制数),对十进制小数表示更精确,但范围小、速度慢。适合金融/会计、价格、税率、金额等。

核心差异速览

方面doubledecimal
位宽 64 位 128 位
表示 二进制浮点(base-2) 十进制浮点(base-10,96 位整数 + 0–28 的尺度因子)
有效数字 ~15–17 位十进制有效数字 28–29 位十进制有效数字
数值范围 ~ ±1.7E308 ~ ±7.9E28
性能 更快(硬件指令支持更强) 更慢(软件实现为主)
典型用途 科学计算、几何、物理、图形 金融、价格、税务、货币累计
字面量后缀 默认浮点字面量是 double(如 0.1 必须加 m/M 后缀(如 0.1m
比较策略 浮点误差需容忍区间(epsilon) 一般能做精确相等(十进制场景)

注意:“更精确”仅指十进制小数(例如 0.1、0.01 这些十进制能有限表示的数)。在“科学计算精度”意义上,double相对误差控制更适合数值分析,但对金融小数累加不友好。

为什么会有误差?

  • double二进制 表示,像 0.1 在二进制是一个无限循环小数,只能近似存储 → 计算会出现微小误差。
  • decimal十进制 缩放存储,0.1 可以被精确表示,所以 0.1 + 0.2 在 decimal 下能得到准确的 0.3。

典型示例对比

1) 金额计算(推荐 decimal

using System;

class Program
{
    static void Main()
    {
        // double:二进制浮点误差
        double d1 = 0.1;
        double d2 = 0.2;
        double dSum = d1 + d2;
        Console.WriteLine($"double: 0.1 + 0.2 = {dSum:R}");   // 可能是 0.30000000000000004

        // decimal:十进制精确表示
        decimal m1 = 0.1m;
        decimal m2 = 0.2m;
        decimal mSum = m1 + m2;
        Console.WriteLine($"decimal: 0.1m + 0.2m = {mSum}");  // 0.3
    }
}

输出(示例):

double: 0.1 + 0.2 = 0.30000000000000004
decimal: 0.1m + 0.2m = 0.3

2) 比较策略(double 用容忍区间,decimal 直接等于)

posted @ 2026-03-09 11:59  PanPan003  阅读(38)  评论()    收藏  举报