Tengo este cuadro de texto que acepta números, comas y puntos.

Vamos a decir de este cuadro de texto contiene la entrada 14,500.00

Traté de convertir este número en decimal con Convert.ToDecimal(textbox.text), pero no está funcionando. Convert.ToDecimal() a cuadros de texto que contienen entrada que tiene el formato de XXXX.DD se convierte a decimal, pero de entrada con formato X,XXX.DD o cualquier entrada con un separador de miles de resultados de error:

Input string was not in correct format

Es Convert.ToDecimal() apropiado en este caso?

INFO ADICIONAL:

¿Cómo puedo convertir la cadena a decimal?

Aquí está el formulario. Si hago clic en ‘Agregar’, el producto de «Precio» y la «Cantidad» debe mostrarse como ‘Cantidad’ en el datagridview.

La sintaxis en el botón ‘Añadir’ incluye:

DataRow dr;
dr = dsDetail.Tables["SalesOrderDetails"].NewRow();
dr["Amount"] = Convert.ToDecimal(txtSellingPrice.Text) * Convert.ToDecimal(txtQuantity.Text);

La Amount campo en mi SalesOrderDetails tabla tiene el tipo de datos decimal(18,2)

  • ¿Cuál es su cultura?
  • ¿Cómo puedo determinar la cultura?
  • Usted puede utilizar CultureInfo.CurrentCulture propiedad de la cultura en la que está utilizando. Esta propiedad se utiliza la configuración Regional y de Idioma en su máquina windows.
  • Soy un poco inexperto en esto de la Cultura material y lo siento mucho por preguntar esto, pero donde puedo encontrar esa clase CultureInfo.CurrentCulture? Es algo que me de código en algún lugar de mi proyecto? o es algo que puedo encontrar en la ventana de propiedades de mi proyecto? @SonerGönül.. Gracias por tu ayuda y voy a entender si no quieres contestar a esta pregunta, pero yo te lo agradecemos mucho que hacer.
  • Han de cruzar el código en el depurador para ver lo que el txt de valores al que se analiza? y has probado a utilizar CultureInfo.InvariantCulture?
  • He. Cuando me la ‘txtSellingPrice.texto » muestra el valor que ha introducido. así como la

4 Comentarios

  1. 7

    Puede obligar a una cultura y el uso decimal.Parse

    decimal d = decimal.Parse("14,500.00", CultureInfo.InvariantCulture); //14500

    Es Convertir.ToDecimal() apropiado en este caso?

    Sí, también se puede seguir el uso de Convert.ToDecimal si quieres:

    d = Convert.ToDecimal("14,500.00", CultureInfo.InvariantCulture);
    • No es de trabajo. He intentado decimal.Analizar y Convertir.ToDecimal. He hecho de todo en su sugerencia, pero todavía se produce el mismo error. Es posible que el problema viene desde el cuadro de texto de la misma? o algún tipo de desajuste en la base de datos que estoy utilizando?
  2. 1

    Sospecho que usted está utilizando una cultura que define . como el miles separador y , como el decimal separador. Si desea forzar , y . como los miles y separadores de decimales, respectivamente, a continuación, utilizar:

    decimal value = Convert.ToDecimal(textbox.text,CultureInfo.InvariantCulture);

    Es Convertir.ToDecimal() apropiado en este caso?

    Está bien – la principal diferencia es que soporta más tipos de decimal.Parse, que sólo admite strings.

  3. 0

    Estoy de acuerdo con @matt_lethargic, sino ofrecer una solución más completa. Probado con XUnit 🙂

    [Theory]
    [InlineData("en-US","44.00")]
    [InlineData("es-PE", "44,00")]
    [InlineData("es-PE", "44.00")]
    [InlineData("es-PE", "0.01E-15")]
    [InlineData("es-PE", "0,01E-15")]
    public void ParsesDeciaml(string culture, string dec)
    {
        CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo(culture);
        decimal d;
        if (!decimal.TryParse(dec, out d)
            && !decimal.TryParse(
                    dec,
                    System.Globalization.NumberStyles.Any,
                    System.Globalization.CultureInfo.CurrentCulture,
                    out d
                )
            && !decimal.TryParse(
                    dec,
                    System.Globalization.NumberStyles.Any,
                    System.Globalization.CultureInfo.InvariantCulture,
                    out d
                )
        ) Assert.False(true, dec);
    
    }

    De esa manera usted puede capturar los valores con la exponencial formatos.

Dejar respuesta

Please enter your comment!
Please enter your name here