【问题标题】:Masked Decimal Input Allow Negative Values屏蔽的十进制输入允许负值
【发布时间】:2022-11-29 02:31:42
【问题描述】:

我正在使用转换器类来屏蔽小数输入。它工作得很好,但我需要允许输入负值。

如何修改此代码以接受负值?

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 valueFromString = Regex.Replace(value.ToString(), @"\D", "");

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

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

            if (valueLong <= 0)
                return 0m;

            return valueLong / 100m;
        }

【问题讨论】:

  • 输入负值时会发生什么?它在哪里失败?
  • 它将其转换为正值。我相信我需要更改 Regex 语句。
  • 您是否逐步检查了调试器中的每一行代码以确定问题发生的确切位置?
  • 是的,这一行是去掉“-”符号:string valueFromString = Regex.Replace(value.ToString(), @"\D", "");

标签: c# xamarin xamarin.forms xamarin.android


【解决方案1】:

有很多方法可以解决这个问题 - 一个是

bool isNeg = value.ToString().Trim().StartsWith("-");

...

if (isNeg)
  return -1 * valueLong / 100m;
else
  return valueLong / 100m;

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多