2009-05-20 6 views
51

Ahora mismo tengo¿Cómo puedo formatear un doble para redondear la moneda al primer dólar?

double numba = 5212.6312 
String.Format("{0:C}", Convert.ToInt32(numba)) 

Esto me dará

$5,213.00 

pero no desea que el" 0,00" .

Sé que puedo soltar los últimos tres caracteres de la cadena cada vez para lograr el efecto, pero parece que debería haber una manera más fácil.

+8

numba es un nombre incorrecto para una variable ... Un personaje más le habría dado el "número" –

+28

Omar es correcto, sin embargo, "número" también es un nombre de mierda para una variable. –

Respuesta

83

Primero - no guarde la moneda en un double - utilice un decimal en su lugar. Cada vez. A continuación, utilice "C0" como el formato especificador:

decimal numba = 5212.6312M; 
string s = numba.ToString("C0"); 
+1

Ningún punto flotante realmente debería usarse como un campo de moneda. Un entero que se almacena en centavos/peniques/unidad monetaria más baja permitida es la única forma de evitar errores de redondeo (y una biblioteca BigInt si necesita números más allá de un largo intervalo de entrada :)) – workmad3

+4

Un entero tiene problemas de redondeo similares a decimales ... decimal es esencialmente un entero grande con un especificador de precisión. La mayoría de las cosas que puede hacer con int puede hacer con decimal, más el decimal es de 96 bits (en lugar de 32 o 64 para int y largo). La mayoría de las monedas se ajustan a 96 bits ... –

+0

Secundaré la prohibición de usar dobles para la moneda. La imprecisión puede provocar problemas y, si es suficientemente grave, auditorías. –

5
Console.WriteLine(numba.ToString("C0")); 
23

Esto debería hacer el trabajo:

String.Format("{0:C0}", Convert.ToInt32(numba)) 

El número después del C especifica el número de decimales que se incluyen.

Supongo que realmente quiere utilizar el tipo decimal para almacenar tales números.

+2

+1. Esto hace el truco perfectamente. – nickb

3

creo que el camino correcto para lograr su objetivo es con esto:

Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalDigits = 0; 

y sólo entonces usted debe hacer la llamada Formato:

String.Format("{0:C0}", numba) 
3
decimal value = 0.00M; 
     value = Convert.ToDecimal(12345.12345); 
     Console.WriteLine(".ToString(\"C\") Formates With Currency $ Sign"); 
     Console.WriteLine(value.ToString("C")); 
     //OutPut : $12345.12 
     Console.WriteLine(value.ToString("C1")); 
     //OutPut : $12345.1 
     Console.WriteLine(value.ToString("C2")); 
     //OutPut : $12345.12 
     Console.WriteLine(value.ToString("C3")); 
     //OutPut : $12345.123 
     Console.WriteLine(value.ToString("C4")); 
     //OutPut : $12345.1235 
     Console.WriteLine(value.ToString("C5")); 
     //OutPut : $12345.12345 
     Console.WriteLine(value.ToString("C6")); 
     //OutPut : $12345.123450 

click to see Console Out Put screen

la esperanza que esto puede ayudar ...

Gracias. :)

Cuestiones relacionadas