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

如何通过LINQ对字符串格式的磁盘容量数值求和?

磁盘大小数值求和方案

嘿,你已经成功把带单位的磁盘大小字符串转成纯数字格式了,接下来要做求和其实很简单,核心就是把这些字符串转成可靠的数值类型再计算。这里推荐用decimal来处理,毕竟磁盘大小是精确的小数,用double容易出现精度丢失的问题。

完整实现代码

Size = a.Type == "Machines" 
    ? 
    {
        var totalDiskSize = a.Info.DiskInfo
            // 取出原始大小字符串
            .Select(b => b.Size)
            // 剥离单位,仅保留数字和小数点
            .Select(c => Regex.Replace(c, "[^0-9.]", ""))
            // 过滤空字符串或无法转换的无效值,避免抛出异常
            .Where(s => !string.IsNullOrWhiteSpace(s) && decimal.TryParse(s, out _))
            // 转换为decimal类型以保证计算精度
            .Select(s => decimal.Parse(s))
            // 对所有有效数值求和
            .Sum();
        
        // 将总和格式化为与原数据一致的两位小数字符串
        totalDiskSize.ToString("0.00")
    }
    : null;

关键细节说明

  • 过滤无效值:添加Where条件是很实用的防御性编程手段,万一某个磁盘大小字符串处理后为空或格式异常,直接转换会导致程序崩溃,这一步能帮你避开这类问题。
  • 优先使用decimal类型:磁盘大小通常是保留两位小数的精确值,decimal的精度远高于double,不会出现类似0.1+0.2=0.30000000000000004的精度偏差问题。
  • 安全转换备选方案:如果你不想过滤无效值,而是希望把转换失败的数值按0处理,可以换成TryParse的写法:
.Select(s => 
{
    decimal.TryParse(s, out var size);
    return size; // 转换失败时默认返回0
})

额外提示

如果之后需要给总和加上单位(比如还原成"XX.XX GiB"的格式),直接在格式化时拼接即可:$"{totalDiskSize.ToString("0.00")} GiB"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:45