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

.NET Decimal算术实现精确规范咨询及运算差异解析

.NET Decimal类型运算行为疑问

运算示例

原始数值:

0.0000000000000000000000000001

它的(lo mid hi flags)内部表示形式:

1 0 0 1c0000

执行除以10操作后,结果的(lo mid hi flags)为:

0 0 0 0

执行乘以0.1M操作后,结果的(lo mid hi flags)为:

0 0 0 1c0000

简言之,Decimal运算中:

  • 0.0000000000000000000000000001 * 0.1M 的结果为 0.0000000000000000000000000000
  • 0.0000000000000000000000000001 / 10M 的结果为 0

演示代码

var o = 0.0000000000000000000000000001M;
Console.WriteLine($"{o * 0.1M}");
Console.WriteLine($"{o / 10M}");

问题需求

我需要在虚拟机中复现Decimal的此类运算行为及所有其他算术逻辑,但查看System.Decimal.cs未找到有效信息,希望获得相关规范说明或原理解释。

更新补充

这似乎是Decimal乘法实现中的bug。根据IEEE 754 2008标准,运算符应保留小数位数(scale),但乘法运算未遵守这一规则。


内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:50:40