2009-07-17 11 views
8

en C#, tengo un precio variable doble con valor 10215.24. Quiero mostrar el precio con una coma después de algunos dígitos. Mi salida esperada es 10,215.24C#: Formato Valor de precio cadena

+2

Las respuestas que ha obtenido sugiriendo .ToString ("N") son buenas. Solo quiero señalar que la salida dependerá del CultureInfo actual; Ésto es una cosa buena. En mi sistema (localidad sueca), imprime "10 215,24", lo cual tiene sentido para mí, ya que "10,215.24" tiene sentido para usted. Solo tenga en cuenta que puede tener problemas si intenta analizar esta cadena * de nuevo a un DateTime *. –

+0

@Fredrik: ¿Por qué lo analizaría de nuevo a * DateTime *? –

+0

Su cerebro probablemente cambió de engranaje a mitad de la frase: p – Svish

Respuesta

26
myPrice.ToString("N2"); 

dependiendo de lo que desea, también puede desear mostrar el símbolo monetario:

myPrice.ToString("C2"); 

(El número después de la C o N indica el número de decimales se debe utilizar). (C formatea el número como una cadena de moneda, que incluye un símbolo de moneda)

Para ser completamente políticamente correcto, también puede especificar el CultureInfo que se debe utilizar.

+1

Creo que "N2" es lo que buscan. –

+0

¿No es el 2 tipo de incumplimiento? ¿Entonces solo necesitarías 'myPrice.ToString (" N ")'?No es importante, solo curiosidad: p – Svish

+0

C2 es incorrecto, porque eso muestra la moneda –

15

creo que esto debería hacerlo:

String.Format("{0:C}", doubleVar); 

Si no desea que el símbolo de la moneda, a continuación, sólo hacer esto:

String.Format("{0:N2}", doubleVar); 
+0

No creo que quisieran un símbolo de moneda. –

+1

esta respuesta es perfecta. Sin embargo, también eche un vistazo a http://msdn.microsoft.com/en-us/library/fht0f5be.aspx para otros tipos de formato. – James

4

Mira en format strings, específicamente "Maíz".

double price = 1234.25; 
string FormattedPrice = price.ToString("N"); // 1,234.25 
6

Como nota al margen, recomendaría buscar en el tipo Decimal de moneda. Evita los errores de redondeo que afectan a los flotantes, pero a diferencia de Integer, puede tener dígitos después del punto decimal.

+0

De hecho. Los decimales deben usarse para cosas donde la precisión importa. –

+1

En ciertas aplicaciones financieras, es completamente ilegal usar flotadores porque todo el redondeo debe hacerse de la manera prescrita. La alternativa donde un tipo de clase Decimal o BigNumbers no está disponible es usar enteros para almacenar fracciones de una unidad monetaria. Entonces, por ejemplo, podríamos contar centavos o fracciones de los mismos. –

+0

¿No es verdad que los errores de coma flotante están aislados para los chips Intel y compatibles? –

1

Esto podría ayudar a

String.Format("{#,##0.00}", 1243.50); // Outputs “1,243.50″ 

    String.Format("{0:$#,##0.00;($#,##0.00);Zero}", 1243.50); // Outputs “$1,243.50″ 

    String.Format("{0:$#,##0.00;($#,##0.00);Zero}", -1243.50); // Outputs “($1,243.50)″ 

    String.Format("{0:$#,##0.00;($#,##0.00);Zero}", 0); // Outputs “Zero″ 
0

la que desea es "N2".

Aquí se muestra un ejemplo:

double dPrice = 29.999988887777666655554444333322221111; 
string sPrice = "£" + dPrice.ToString("N2"); 

Puede ser que incluso así:

string sPrice = ""; 

if(dPrice < 1) 
{ 
    sPrice = ((int)(dPrice * 100)) + "p"; 

} else 
{ 
    sPrice = "£" + dPrice.ToString("N2"); 

} 

que se condensa muy bien a esto:

string sPrice = dPrice < 1 ? ((int)(dPrice * 100)).ToString("N0") + "p" : "£" + dPrice.ToString("N2"); 

lecturas adicionales al msdn.microsoft.com/en-us/library/fht0f5be.aspx para varios otros tipos del formato