2012-04-25 17 views
5

que tienen la siguiente línea:¿Por qué este formato de cadena no es una moneda?

//Send Email 
clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", strOrderTotal + "\n"); 

reloj de muestra:

String.Format("{0:C}", strOrderTotal + "\n") "35\n" string 

Pero sólo da salida a "35". Esperaba "$ 35.00" ¿Por qué esto no funciona como se esperaba?

Gracias

+5

Porque está formateando una cadena. Incluso si 'strOrderTotal' es' decimal', tu '+" \ n "' lo fuerza a una 'cadena'. – dasblinkenlight

+0

Sí, estabas todo correcto. ¡Muchas gracias! – Kolten

Respuesta

8

Supongo que strOrderTotal es una cadena? Creo que {0:C} solo funciona para tipos decimales o int.

2

No han demostrado la declaración de strOrderTotal pero por su nombre me asumiendo que es ya un string. Como ya es una cadena, el formateo no funcionará.

Si desea que el formato funcione, deberá pasar el total del pedido como un número, preferiblemente un decimal.

2

Porque es una cadena.

Al intentar formatear una cadena, se devuelve ... la cadena.

Necesita un valor numérico para obtener el formato de moneda.

Verá que el especificador de formato C se define en la página Standard Numeric Format String en MSDN. Numérico, no "cuerdas".

2

Supongo que strOrderTotal es una cadena? Tenía que ser decimal, o doble, etc.

2

Voy a suponer que strOrderTotal es una cadena. Debe usar un tipo numérico, como doble o decimal.

2

Parece (basado en el nombre de la variable strOrderTotal) que su total ya es una cadena. El especificador de formato "C" convierte un número en formato de moneda, no algo que ya sea una cadena.

Por lo tanto, necesita formatear manualmente su cadena como moneda o aplicar el formato de moneda cuando el total del pedido se convierte originalmente en una cadena (cuando se almacena en strOrderTotal).

1

Si strOrderTotal es una cadena que puede utilizar este código para formatearlo para la moneda

clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", decimal.Parse(strOrderTotal) + "\n"); 
+0

No. No puede convertir una cadena en un decimal mediante un molde. –

+0

'decimal.Parse (cadena)' funcionaría, pero lanzar un decimal a una cadena no lo hará. – SouthShoreAK

5

No puedo creer que todas estas respuestas y nadie ha mencionado esto, cambiar el código para

clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", strOrderTotal) + "\n"; 

Y ver si se soluciona el problema, sin embargo una mejor manera de hacerlo sería

clntMailBody = String.Format("{0}Order Total: {1:C}\n", clntMailBody, strOrderTotal); 

es mucho es más fácil ver qué está sucediendo y elimina una gran cantidad de concatenación de cadenas.

Si usted está dispuesto a hacer un poco más re-escribir una aún mejor solución es: (he hecho un poco de lógica para mostrar mi ejemplo)

StringBuilder clntMailBody = new StringBuilder(); 

clntMailBody.AppendLine("Some Fixed body Text") 

foreach(string lineItem in Invoice) 
{ 
    clntMailBody.AppendLine(lineItem); 
} 

clntMailBody.AppendFormat("Order Total {0:C}", strOrderTotal).AppendLine(); 

return clntMailBody.ToString(); 
0

Para mostrar una cadena en el formato de moneda:

StringBuilder sb= new StringBuilder("Your total amount is "); 
sb.AppendFormat("{0:C} ", 25); 
Console.WriteLine(sb); 

salida:

Su importe total es de $ 25.00

Cuestiones relacionadas