es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertidor de Moneda Xamarin Permitir Negativo

Tengo una clase convertidora de moneda para convertir la entrada de entrada a moneda. Sin embargo, me gustaría permitir valores negativos también.

<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;
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para permitir valores negativos en la clase del convertidor de moneda, debes modificar el método ConvertBack. Actualmente, solo devuelve 0 si el valor de entrada está vacío o no se puede analizar, y devuelve el valor dividido por 100 en caso contrario.

    Para permitir valores negativos, puedes modificar el método ConvertBack de la siguiente manera:

    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;
    
        return valueLong / 100m * (value.ToString().StartsWith("-") ? -1 : 1);
    }
    

    Esto convertirá la cadena de entrada en un valor long, luego lo dividirá por 100 y lo multiplicará por -1 si la entrada comienza con un signo negativo (“-“). De lo contrario, lo multiplicará por 1 (es decir, lo dejará positivo).

    Con esta modificación, el convertidor ahora permitirá ingresar valores negativos en el campo de entrada.

Comments are closed.