2009-06-26 31 views
47

Alimento a un cuadro de texto un valor de cadena que me muestra un equilibrio que necesita ser formateada como esto:formato a un doble valor como moneda, pero sin el signo de moneda (C#)

###,###,###,##0.00 

que podía usar el value.ToString ("c"), pero esto pondría el signo de moneda delante de él.

¿Alguna idea de cómo manipularía la cadena antes de alimentar el cuadro de texto para lograr el formato anterior?

yo probamos este, sin éxito:

String.Format("###,###,###,##0.00", currentBalance); 

Muchas gracias,

Respuesta

50
string forDisplay = currentBalance.ToString("N2"); 
+10

Esto no es aceptable porque si el símbolo negativo para la moneda en el cultivo es() y el símbolo negativo para decimales es -, la representación de la moneda será incorrecta. –

+2

@Bob: Este es el aceptado responda, por definición, es aceptable para el OP. Como no hay un especificador de formato incorporado para "formatear como una moneda pero sin el símbolo de moneda", se requeriría algún tipo de procesamiento manual en esa situación: cualquiera * (1) * utilice un 'NumberFormatInfo' personalizado según la respuesta de Jon, * (2) * utilice una cadena de formato personalizado, o * (3) * llame a' ToString ("c") 'y luego proceso posterior para eliminar el símbolo. – LukeH

+0

@ LukeH: Aunque esta es la respuesta aceptada La respuesta que proporciona Jon Skeet es más correcta en el sentido de que usa los formatos de moneda proporcionados por NumberFormatInfo. –

58

Si el formato de moneda le da exactamente lo que quiere, clonar un NumberFormatInfo con y establezca la propiedad CurrencySymbol a "". Debería verificar que maneja los números negativos de la manera que usted desea también, por supuesto.

Por ejemplo:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; 
     nfi = (NumberFormatInfo) nfi.Clone(); 

     Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m)); 
     nfi.CurrencySymbol = ""; 
     Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m)); 
    } 
} 

La otra opción es utilizar una cadena de formato numérico personalizado por supuesto - que depende de si realmente se quiere duplicar exactamente cómo una moneda se vería, solo que sin el símbolo, o el control el posicionamiento exacto de los dígitos.

+0

Esto funciona perfectamente. Si desea que la moneda se formatee como la cultura actual, pero sin el símbolo, esta parece ser la mejor solución. –

+1

Puede considerar agregar un Trim() al resultado para asegurarse de que no tiene espacios iniciales (o posteriores). –

+1

@BenjaminWegman: supongo que si el formato de moneda sensible a la cultura incluye espacios en blanco, está ahí por alguna buena razón. –

7

Ha intentado:

currentBalance.ToString("#,##0.00"); 

Ésta es la larga mano equivalente a:

currentBalance.ToString("N2"); 
2
CultureInfo cultureInfo = new CultureInfo("en-US"); 
cultureInfo.NumberFormat.CurrencySymbol = "Rs."; 

Thread.CurrentThread.CurrentCulture = cultureInfo; 
decimal devimalValue = 3.45M; 
this.Text = devimalValue.ToString("C2"); //Rs.3.45 
5

cadena resultado = string.Format ("{0: N2} ", valor); . // Por resultado como ### ### ## ##

3

Usted puede hacer esto con the group separator y the section separator, así:

currentBalance.ToString("#,0.00;(#,0.00)"); 

Esto no tiene en cuenta la cultura varianzas como la respuesta de @JonSkeet lo haría, pero imita el lugar decimal, el redondeo, la separación de miles y el manejo de números negativos que produce el formato de moneda de la cultura en-US utilizando una única cadena de formato personalizado.

.NET Fiddle Demo

0

Ésta puede ser una exageración, pero rondas, formatos ...

@helper TwoDecimalPlaces(decimal? val) 
{ 
    decimal x = 0; 
    decimal y = 0; 
    string clas = "text-danger"; 
    if (val.HasValue) 
    { 
     x = (decimal)val; 
     if (val > 0) 
     { 
      clas = ""; 
     } 
    } 
    y = System.Math.Round(x, 2); 
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty); 
    <span class="@clas">@string.Format("{0:N2}", y)</span> 
} 
0

Esta sencilla solución funciona para mí con la moneda estadounidense.

Si no necesitar el uso internacional de divisas apoyo esto y sustituir el $ con el símbolo (s) moneda que se retira:

// for USD 
string result = currentBalance.ToString("C").Replace("$", "") 

o

// for EUR 
string result = currentBalance.ToString("C").Replace("€", "") 
Cuestiones relacionadas