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

C#中如何对Dictionary剩余负值执行除法运算并保留10位小数?

问题解决:负数字典的除法运算及小数保留

问题根源

你当前代码的核心问题是初始值设置错误:用1作为除法起始值,计算的是1依次除以所有负数,这和你期望的「以第一个负数为被除数,连续除以剩余负数」的逻辑不符。比如给定-2、-4、-8、-5,你的代码算出的是1 / (-2) / (-4) / (-8) / (-5) = 0.003125,而期望的是-2 / (-4) / (-8) / (-5) = 0.0125。

修正代码

double divisionSum;
var negativeValues = dic.Values.ToList();

// 处理空字典的边界情况(根据你的需求调整)
if (!negativeValues.Any())
{
    divisionSum = 0; // 或者抛出异常、返回默认值
}
else
{
    // 以第一个负数作为初始被除数
    divisionSum = negativeValues[0];
    // 遍历剩余负数,依次执行除法
    for (int i = 1; i < negativeValues.Count; i++)
    {
        divisionSum /= negativeValues[i];
    }
}

// 保留10位小数(不使用Math方法的实现)
// 方式1:转为字符串格式化
string resultStr = divisionSum.ToString("F10");
// 方式2:转为数值类型(通过字符串中转)
double resultNum = double.Parse(resultStr);

验证示例

当字典值为-2、-4、-8、-5时:

  1. 初始值divisionSum = -2
  2. -2 / (-4) = 0.5
  3. 0.5 / (-8) = -0.0625
  4. -0.0625 / (-5) = 0.0125
  5. 格式化后得到0.0125000000(10位小数)

关键说明

  • 必须用第一个负数作为初始值,才能匹配你期望的除法逻辑
  • 空字典的边界处理根据实际业务需求调整(比如你的场景下是否可能没有剩余负数)
  • 用ToString("F10")格式化可以直接保留10位小数,且无需依赖Math类方法,符合你的限制要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:06:30