¿Cómo puedo convertir la cadena a decimal?

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 Kommentare

  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.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea