2011-01-30 29 views
33

¿Existe una biblioteca para formatear la representación de moneda correcta para un país?Formato de moneda para mostrar

Ejemplo Reino Unido - £ 127,54 Países Bajos € 127,54- EE.UU. $ 127,54

etc ..

Algunas cosas a tener en cuenta,

  1. símbolo de moneda

  2. Colocación de símbolo de moneda - Puede ser pla ce antes o después de los dígitos .

  3. pantalla Negativo-cantidad

Respuesta

59

Prueba el Currency Format Specifier ("C"). Toma automáticamente en cuenta la cultura de UI actual y muestra los valores de moneda en consecuencia.

Puede usarlo con String.Format o el método ToString sobrecargado para un tipo numérico.

Por ejemplo:

double value = 12345.6789; 
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)); 

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)); 

Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK"))); 

// The example displays the following output on a system whose 
// current culture is English (United States): 
//  $12,345.68 
//  $12,345.679 
//  kr 12.345,679 
+0

Una pequeña nota para futuros lectores, los decimales son el tipo preferido de valores de moneda. Consulte esta respuesta de Zneak para obtener más detalles: https://stackoverflow.com/a/3730040/2573109 –

21

Este tipo de funcionalidad está integrada en

Cuando se utiliza un número decimal se puede utilizar un format string "C" o "c"..

decimal dec = 123.00M; 
string uk = dec.ToString("C", new CultureInfo("en-GB"); // uk holds "£123.00" 
string us = dec.ToString("C", new CultureInfo("en-US"); // us holds "$123.00" 
+2

Creo que le falta un paréntesis en las líneas 2 y 3. –

2

Este código- (conjuntos moneda a: GB (Gran Bretaña/Reino Unido/Inglaterra/£) luego imprime una línea a continuación, establece la moneda a US/$ e imprime una línea)

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false);   
Console.WriteLine("bbbbbbb {0:c}",4321.2); 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false); 
Console.WriteLine("bbbbbbb {0:c}",4321.2); 

Se Pantalla-

bbbbbbb £4,321.20 
bbbbbbb $4,321.20 

Para obtener una lista de nombres de culturas, p. en-GB en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

4

El problema con la toma de un número dado y se presentan con .ToString ("C", cultura) es que cambia efectivamente la cantidad a la moneda por defecto de la cultura dada. Si tiene un monto determinado, el código de moneda ISO de esa cantidad, y desea mostrarlo para una cultura determinada, le recomendaría simplemente crear un método de extensión decimal como el siguiente. Esto no asuma automáticamente que la moneda está en la moneda base de la cultura:

public static string ToFormattedCurrencyString(
    this decimal currencyAmount, 
    string isoCurrencyCode, 
CultureInfo userCulture) 
{ 
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol; 

    if (userCurrencyCode == isoCurrencyCode) 
    { 
     return currencyAmount.ToString("C", userCulture); 
    } 

    return string.Format(
     "{0} {1}", 
     isoCurrencyCode, 
     currencyAmount.ToString("N2", userCulture)); 
} 

Esto ya sea utilizar el símbolo de moneda local o el código de moneda ISO con la cantidad - lo que es más apropiado.Más sobre el tema in this blog post.

-2
public static string ToFormattedCurrencyString(
    this decimal currencyAmount, 
    string isoCurrencyCode, 
    CultureInfo userCulture) 
{ 
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol; 

if (userCurrencyCode == isoCurrencyCode) 
{ 
    return currencyAmount.ToString("C", userCulture); 
} 

return string.Format(
    "{0} {1}", 
    isoCurrencyCode, 
    currencyAmount.ToString("N2", userCulture)); 

}

+2

Exactamente igual que la respuesta de @ jakejgordon de 2 años antes. – kristianp

Cuestiones relacionadas