2012-06-29 7 views

Respuesta

9
var stringValue = Convert.ToDecimal(value).ToString("$0.00"); 

Según lo observado por @James a continuación, esto codifica la moneda en el formato. Usando el formato C2 usará el formato de moneda del sistema. Esto se puede cambiar para el sistema (por ejemplo, en Windows 7 - Inicio - Panel de control - Cambiar idioma de pantalla - Configuración adicional - Moneda - Agrupación de dígitos) y permitirá que el formato C2 muestre el valor de la moneda sin la coma cuando se ejecuta en ese sistema particular .

EDITAR

Todo el crédito a @ James para el uso de la cultura actual. Mi única modificación a su respuesta sería clonar el actual NumberFormat para obtener todas las propiedades del formato de número de cultura actual antes de eliminar el CurrencyGroupSeparator.

var formatInfo = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone(); 
formatInfo.CurrencyGroupSeparator = string.Empty; 

var stringValue = Convert.ToDecimal(value).ToString("C", formatInfo); 
+0

yah eso es todo! Serán aceptados después de 8 minutos :) –

+2

Aunque funciona, no es una solución flexible, es decir, su código rígido del símbolo de divisa es en dólares. – James

+0

¿Hay alguna manera de convertir este stringValue nuevamente en el número? – Micro

4

Se debe utilizar la clase NumberFormat para especificar el tipo de formato que necesita, ToString toma un parámetro, por ejemplo IFormatProvider

var formatInfo = (System.Globalization.NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone(); 
formatInfo.CurrencyGroupSeparator = ""; // remove the group separator 
Console.WriteLine(2.ToString("C", formatInfo)); 
Console.WriteLine(4.ToString("C", formatInfo)); 
Console.WriteLine(1000.ToString("C", formatInfo)); 

Esto mantendrá el formato de los números coherente con la cultura que esté utilizando.

+0

+1 a usted! Solución mucho mejor que mi respuesta. –

+1

Quizás use 'var formatInfo = (NumberFormatInfo) CultureInfo.CurrentCulture.NumberFormat.Clone();' en lugar de crear un nuevo 'NumberFormatInfo'? de esa manera, se asegurará de tener el formato de número completo para la cultura actual. –

+0

@Kevin +1, sí, para completar, sería una solución mejor en general. Actualizaré mi respuesta. – James

2
public static class MyExtensions 
{ 
    public static string GetMoney(this decimal value, bool displayCurrency = false, bool displayPeriods = true) 
    { 
     string ret = string.Format("{0:C}", value).Substring(displayCurrency ? 0 : 1); 
     if (!displayPeriods) 
     { 
      ret = ret.Replace(",", string.Empty); 
     } 
     return ret; 
    } 
} 

Para usar este método de extensión:

decimal test = 40023.2345M; 
string myValue = test.GetMoney(displayCurrency:true, displayPeriods:false);` 
0

convertir el valor de número entero en formato $ 0,00

int Valor = 1,000; cadena abc = Convert.ToDecimal (Valor) .ToString ("$ 0.00"); salida será $ 1000.00

Cuestiones relacionadas