You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用double类型计算结果为何不为0?

为什么C#中double类型计算结果不为0,decimal却为0?

你的代码里用double类型计算(_v1 - _v2) - _v3时结果不为0,核心原因是double和decimal的存储机制完全不同:

  • double是二进制浮点数:它用二进制编码表示数值,但大部分十进制小数(比如你代码里的0.08、0.17、0.91)无法被二进制精确表示,只能存储为近似值。当这些近似值参与减法运算时,微小的误差会累积,最终得到一个极小的非零值(比如1.4210854715202004e-14这类量级的数),而非预期的0。
  • decimal是十进制浮点数:它专门针对十进制小数设计,存储的是十进制数字和缩放因子,能精确表示像0.08、0.17这类常见的十进制小数。用decimal运算时,所有数值都是精确存储的,减法后自然得到精确的0。

验证decimal版本的代码,结果确实会是0:

decimal _v1 = 1687.08m;
decimal _v2 = 175.17m;
decimal _v3 = 1511.91m;
decimal _answer = (_v1 - _v2) - _v3;
Console.WriteLine($"{((_v1 - _v2) - _v3)}");
Console.WriteLine($"{_answer}");

内容的提问来源于stack exchange,提问作者Ron Bowes II

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:04:53