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

如何修改掩码Decimal输入转换器代码以支持负值输入?

修改后的Converter类代码
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    // 原有逻辑无需改动,负数会自动保留负号并格式化为两位小数
    return Decimal.Parse(value.ToString()).ToString("#0.00");
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
    string input = value.ToString().Trim();
    // 标记输入是否为负数(仅识别开头的负号)
    bool isNegative = input.StartsWith("-");
    
    // 提取所有数字字符,非数字内容全部移除
    string valueFromString = Regex.Replace(input, @"\D", "");

    if (valueFromString.Length <= 0)
        return 0m;

    long valueLong;
    if (!long.TryParse(valueFromString, out valueLong))
        return 0m;

    // 计算基础数值后,根据标记添加负号
    decimal result = valueLong / 100m;
    return isNegative ? -result : result;
}
修改要点
  1. 保留负号信息:先判断输入是否以负号开头,用变量记录状态,避免正则把负号当成非数字移除
  2. 取消正数限制:删掉了原代码里if (valueLong <= 0) return 0m;的判断,允许0和负数正常转换
  3. 结果补全符号:计算出基础的十进制值后,根据之前的标记给结果加上负号
可选优化:处理多负号场景

如果需要支持类似--123(视为正数)、---123(视为负数)的输入,可以把负号判断改成统计次数:

// 统计输入中负号的总数,奇数次为负,偶数次为正
int negativeCount = input.Count(c => c == '-');
bool isNegative = negativeCount % 2 == 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:50:21