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

Linqpad数值字段截断至指定小数位支持及替代方案问询

LINQPad 数值字段输出截断配置与批量处理方案

一、LINQPad 是否支持内置的数值字段截断配置?

LINQPad的结果设置中,目前没有像DateTime那样可以全局配置数值字段保留指定小数位数的选项。它的结果格式化逻辑主要针对日期、集合展示等场景,数值类型默认会按自身精度输出,没有全局截断的开关。

二、批量处理大量double属性的方案

如果对象包含上百个double属性,不想重复编写Math.Round(obj.Property, 4, MidpointRounding.ToZero)这类代码,可以用以下几种高效方式处理:

1. 反射批量修改属性值

通过反射遍历对象的所有double类型属性,统一执行截断逻辑:

public static T TruncateDoubleProperties<T>(T targetObj, int decimalPlaces = 4)
{
    if (targetObj == null) return targetObj;

    var doubleProperties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
                                    .Where(p => p.PropertyType == typeof(double) && p.CanWrite);

    foreach (var prop in doubleProperties)
    {
        var originalValue = (double)prop.GetValue(targetObj);
        var truncatedValue = Math.Round(originalValue, decimalPlaces, MidpointRounding.ToZero);
        prop.SetValue(targetObj, truncatedValue);
    }

    return targetObj;
}

使用时直接传入对象即可:

var processedObject = TruncateDoubleProperties(yourLargeObject);
processedObject.Dump();

注意:如果是值类型对象,需接收返回的新实例;引用类型则会直接修改原对象的属性值。

2. 自定义LINQPad输出格式化器

无需修改原对象数据,仅在Dump()输出时自动截断double属性:

void Main()
{
    var targetObj = new YourLargeDataType 
    { 
        PropA = 3.1415926, 
        PropB = 2.7182818,
        // ... 其他上百个属性
    };
    targetObj.Dump();
}

// 自定义格式化器
public class DoubleTruncFormatter : ICustomMemberFormatter
{
    public string FormatValue(object value, string formatString, bool isEnumerable)
    {
        if (value is double num)
        {
            return Math.Round(num, 4, MidpointRounding.ToZero).ToString();
        }
        return null; // 其他类型用默认格式化逻辑
    }
}

// 注册格式化器到目标类型
static DoubleTruncFormatter()
{
    CustomMemberFormatter.Register<YourLargeDataType>(new DoubleTruncFormatter());
}

3. AutoMapper批量映射到DTO(保留原数据)

如果允许创建结构一致的DTO类,用AutoMapper配置全局double类型转换规则:

// 定义与原对象结构一致的DTO
public class YourLargeDataTypeDto
{
    public double PropA { get; set; }
    public double PropB { get; set; }
    // ... 其他上百个属性
}

// 配置AutoMapper映射规则
var mapperConfig = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<YourLargeDataType, YourLargeDataTypeDto>();
    cfg.ForAllMembers(opt =>
    {
        if (opt.DestinationMemberType == typeof(double))
        {
            opt.MapFrom(src => Math.Round((double)opt.SourceMember.GetValue(src), 4, MidpointRounding.ToZero));
        }
    });
});

var mapper = mapperConfig.CreateMapper();
var formattedDto = mapper.Map<YourLargeDataTypeDto>(yourLargeObject);
formattedDto.Dump();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:50:38