Posts by: Gabriel

No entran o salen llamadas de tu iPhone? Desactiva el 3G y dejalo en EDGE

iPhone Telcel

iPhone Telcel

Hace unos dos o tres días empecé a tener problemas al querer hacer llamadas con mi iPhone 3G S.

Apenas y seleccionaba un contacto que llamar, pasaba un segundo (ni siquiera daba línea el teléfono) y la llamada terminaba sola. “Call back failed”. Un día después, un amigo me avisó que mi celular lo estaba mandando directo a buzón al intentar llamarme. Las llamadas si podían salir, después de intentarle 3 o 4 veces. Y a veces recibía llamadas, no se realmente cuantas llamadas perdí.

Para poder hacer y recibir llamadas cuando tengan este problema, simplemente deshabiliten el 3G de su telefono, para dejarlo en EDGE, y problema arreglado (a medias).

Estoy leyendo en foros de Estados Unidos que alguna gente que ha tenido este problema lo arregla cambiando su chip SIM…tal vez luego intente eso.

Como formatear una cantidad a currency en .NET controlando el numero de decimales

.NET

Tantas opciones que hay para formatear strings en.NET, que es difícil memorizar todas.

Hoy tuve que formatear una cifra numérica que en la base de datos está como decimal, pero en el UI no quería desplegar ninguno de los decimales. Casi todo el mundo ha utilizado el string.Format(“{0:C”), el cual formatearía como si la cantidad fuera una cifra monetaria, pero eso implica tener decimales.

Algua persona podría pensar en realizar esto desde el stored procedure o el query que trae la información, pero personalmente creo que eso es un error, ya que los datos deben estar siempre  intactos y lo unico que debemos modificar es el formato en el que los queremos desplegar. Además, eso implicaría tener que estar controlando también el formato del símbolo separador de miles. Esto es algo que simplemente no se debe hacer en base de datos.

Googleando, encontré en los forums de ASP.NET la siguiente manera de hacerlo, pero tampoco es la más correcta:


System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.CurrencyDecimalDigits = 0;
nfi.CurrencySymbol ="$";
myLabel.Text =string.Format(nfi,"{0:C}", ad.Price);

Ya que estoy utilizando esto en un control Repeater, tendría que crear un método con las primeras 3 líneas de texto anteriores, y eso implicaría estar generando varias instancias de NumberFormatInfo.

Para ya no hacer más largo este post, les dejo la solución correcta.


string.Format("0:C0", ad.Price);

Así de sencillo…y no lo especifican en ningun lugar de MSDN…lo vine a encontrar aqui: .NET Format String 101. Obvio decirlo, basta cambiar el C0 por C1, C2, C3 o Cx para determinar el número de decimales que queremos desplegar. Esto también hace mucho más facil poner ese format string en el archivo de configuración y poder reutilizarlo en varias pantallas sin tener que estar cambiando código.

Les dejo también otra buena referencia de string.Format: String Formatting in C#

Aplicar formatos condicionales a numeros con string.Format

.NET

Esto es algo que descubrí hoy referente a formateo de números en .NET y que por más simple que parezca, tiene mucha utilidad, ya que puede reducir un bloque de 3 o 6 líneas de código, a una sola línea.

En lugar de necesitar varios if’s para evaluar el valor del número que vamos a formatear y poder determinar el formato que se va a aplicar (desplegar el número entre paréntesis si es negativo, desplegar la palabra Cero si el número es 0, etc), se puede hacer todo el una sola línea, ya que el metodo ToString() permite formatos condicionales de 2 o 3 condiciones…es decir, podemos hacer esto:


const string formato = "000;(##);Cero";

 Console.WriteLine(7.ToString(formato)); // va a desplegar "007"
 Console.WriteLine((-5).ToString(formato)); // va a desplegar "(5)"
 Console.WriteLine(0.ToString(formato)); // va a desplegar "Cero"

Formatos condicionales en .NET usando ToString()

Formatos condicionales en .NET usando ToString()

El formato entonces es:  “positivo;negativo;cero”.

También es posible especificar solo el formato positivo y negativo.

Espero les sirva.

Usar el operator ternario de C# con nullables

.NET

.NET

Todos los días se aprende algo…

Desde hace mucho tenemos disponible el operador ternario (o condicional) en C#, también conocido como el operador “?“.

El operador ternario sirve para regresar/usar uno de dos posibles valores, dependiendo de una condición boleana.

La estructura es:

condicion-boleana ? valor-si-se-cumple : valor-si-no-se-cumple

Es decir, permite reducir de esto:


int? myVar; //variable int nullable

if(string.IsNullOrEmpty(textbox1.Text))

{ myVar = null; }

else

{ myVar = Convert.ToInt32(textbox1.Text); }

a esto:


myVar =string.IsNullOrEmpty(textbox1.Text) ? null : Convert.ToInt32(textbox1.Text);

Y uno esperaría que el código del segundo bloque compile, pero no es así. En lugar de que funcione, el compilador nos marca el siguiente error:

Type of conditional expression cannot be determined because there is no implicit conversion between ‘<null>’ and ‘int’

Yo llevaba años usando el operador ternario y siempre me pareció ilógico que no se permitiera esto. Y probablemente fue más ilógico el hecho de nunca haber googleado como solucionar esto..ya que la solución es simple.


myVar =string.IsNullOrEmpty(textbox1.Text) ? (int?)null : Convert.ToInt32(textbox1.Text);

o


myVar =string.IsNullOrEmpty(textbox1.Text) ? null : (int?)Convert.ToInt32(textbox1.Text);

Simple…el compilador tenía razon. No hay una conversión implícita entre null e int, pero sí entre null y Nullable<int> (a.k.a. int?). Casteando cualquiera de los lados de la expresión, va a compilar sin problemas.

Espero les sirva.

1 10 11 12 13 14 31  Scroll to top