我有一个货币转换类来将输入转换成货币。但是,我也要考虑到消极的价值观。
<Entry Text="{Binding Price, Converter={StaticResource currencyConverter}}" Keyboard="Numeric" Placeholder="$0.00""/>public class CurrencyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Decimal.Parse(value.ToString()).ToString("C");
}
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;
}
}发布于 2021-12-28 00:07:39
那么,您应该用正则表达式更改方法。
不要替换所有的非数字字符,尝试用可能的前导破折号来捕获数字。
它的正则表达式是:^-?\d+$

您可以查看这个正则表达式是如何工作的,这里。
它的使用有点不同。
string valueFromString = Regex.Match("", @"^-?\d+$").Value;最后一个想法是:您应该删除最后一个条件,因为如果输入值小于零,则返回零。
if (valueLong <= 0)
return 0m;我不知道你的应用程序的其他逻辑,但这将是第一步。
发布于 2021-12-28 02:00:25
根据您所描述的要求,您只想将输入号转换为十进制类型。
Completed的入口方法并在内部判断它。我写了一个小例子供你参考:
以下是背景代码(查看添加注释的位置):
private void Entry_Completed(object sender, EventArgs e)
{
int myenry = int.Parse((sender as Entry).Text.ToString());
string returnEntry = Decimal.Parse(mytest.Text.ToString()).ToString("C");
if (myenry < 0) //Judge here and perform string replacement
{
returnEntry = returnEntry.Insert(2,"-");
}
mytest1.Text = returnEntry;
}https://stackoverflow.com/questions/70501494
复制相似问题