Principales respuestas
decimal menor que c#

Pregunta
-
hola a todos tengo el siguiente codigo
if (Convert.ToDecimal(tb_val_tcm.Text)>10) { return "Dato no valido, el T.C. debe ser menor que 10"; }
donde le digo que el valor (decimal o entero) que se ingrese en el textbox "tb_val_tcm" que sea menor que 10
cuando igreso numeros enteros todo bien acepta la instruccion
el problema es que cuando intento ingresar un decimal en el textbox. por ejemplo pongo un 4.5 dentro el textbox, cuando hace la comparacion tomal el 4.5 como 45.. y me retorna el mensaje cuando en realidad 4.5 es menor que 10 por lo cual no deberia retornar el mensaje
y pasa lo mismo con cualquier decimal le quita el punto y lo vuelve un entero
como podria solucionar el problema??
Respuestas
-
Buenas
Puedes hacer un replace para cambiar el '.' por la coma ',':
if (Convert.ToDecimal(tb_val_tcm.Text.Replace('.',','))>10) { return "Dato no valido, el T.C. debe ser menor que 10"; }
De todos modos, si el programa puede estar en PCs que no controlas, te convendria hacer un replace con la configuracion regional de separador de miles y de decimales, por si algun usuario los tiene cambiados:
//Obtenemos los separadores char coma,miles; if (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",") { coma = ','; miles = '.'; } else { coma = '.'; miles = ','; } //Hacemos el replace con los separadores if (Convert.ToDecimal(tb_val_tcm.Text.Replace(miles ,coma ))>10) { return "Dato no valido, el T.C. debe ser menor que 10"; }
Esta hecho almacenando el valor de comas y miles en un char por si quieres guardarlos a nivel de formulario y así no lo calculas en cada llamada al método (y te vale para otros métodos), si no lo necesitas así, podrías meter tu if dentro de los otros if y cambiar coma y miles por los caracteres en concreto.
Nos comentas el resultado
Atte
No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.
Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:
- Editado Jorge TurradoMVP jueves, 9 de noviembre de 2017 20:30
- Marcado como respuesta aldair1225 jueves, 9 de noviembre de 2017 21:05
Todas las respuestas
-
Buenas
Puedes hacer un replace para cambiar el '.' por la coma ',':
if (Convert.ToDecimal(tb_val_tcm.Text.Replace('.',','))>10) { return "Dato no valido, el T.C. debe ser menor que 10"; }
De todos modos, si el programa puede estar en PCs que no controlas, te convendria hacer un replace con la configuracion regional de separador de miles y de decimales, por si algun usuario los tiene cambiados:
//Obtenemos los separadores char coma,miles; if (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",") { coma = ','; miles = '.'; } else { coma = '.'; miles = ','; } //Hacemos el replace con los separadores if (Convert.ToDecimal(tb_val_tcm.Text.Replace(miles ,coma ))>10) { return "Dato no valido, el T.C. debe ser menor que 10"; }
Esta hecho almacenando el valor de comas y miles en un char por si quieres guardarlos a nivel de formulario y así no lo calculas en cada llamada al método (y te vale para otros métodos), si no lo necesitas así, podrías meter tu if dentro de los otros if y cambiar coma y miles por los caracteres en concreto.
Nos comentas el resultado
Atte
No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.
Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:
- Editado Jorge TurradoMVP jueves, 9 de noviembre de 2017 20:30
- Marcado como respuesta aldair1225 jueves, 9 de noviembre de 2017 21:05
-
Hola, deberías probar parsear el txt así:
decimal result; if (decimal.TryParse(tb_val_tcm.text, out result)) ; // decimal válido else ; // excepción decimal no válido
En segundo lugar tienes que ver como está la configuración regional de tu sistema, quizás tienes la configuración regional en Español-España, en dicho caso esta configuración te tomará la coma como separador de miles y el punto como separador decimal. Puedes cambiar esto desde Panel de Control -> Reloj, idioma y religión -> Cambiar formatos de fecha, hora y número -> Configuración Adicional.
Espero te sirva la ayuda... saludos.-
- Editado Ramiro Ledesma jueves, 9 de noviembre de 2017 21:13 corrección codigo
- Propuesto como respuesta Juan MondragónModerator viernes, 10 de noviembre de 2017 23:40