2010-08-13 14 views

Respuesta

76

Las propiedades pueden devolver lo que quieran, pero será necesario devolver el tipo correcto.

private decimal _amount; 

public string FormattedAmount 
{ 
    get { return string.Format("{0:C}", _amount); } 
} 

La pregunta fue formulada ... ¿y si fuera un decimal con nulos?

private decimal? _amount; 

public string FormattedAmount 
{ 
    get 
    { 
     return _amount == null ? "null" : string.Format("{0:C}", _amount.Value); 
    } 
} 
+0

¿Qué pasa si la cantidad es un decimal anulable? – Groppe

+0

Edité el original para darle un ejemplo. – Robaticus

+0

También puede especificar el número de decimales deseados después de la letra C, por ejemplo, si su valor era 12.123 y solo quería 2 decimales en la salida, puede usar String.Format ("{0: C2}", _amount.Value. Además, puede especificar un IFormatProvider si desea que su cadena tenga el formato de una cultura específica. –

0

Un tipo de decimal no puede contener información de formato. Puede crear otra propiedad, digamos FormattedProperty de un tipo de cadena que hace lo que quiere.

26

A continuación también funcionaría, pero no se puede poner en el captador una propiedad decimal. El captador de una propiedad decimal solo puede devolver un decimal, para lo cual el formato no se aplica.

decimal moneyvalue = 1921.39m; 
string currencyValue = moneyvalue.ToString("C"); 
1

Su formato devuelto estará limitado por el tipo de declaración que declare. Entonces, sí, puede declarar la propiedad como una cadena y devolver el valor formateado de algo. En el "obtener" puede poner cualquier código de recuperación de datos que necesite. Por lo tanto, si necesita acceder a un valor numérico, simplemente coloque su declaración de devolución como:

private decimal _myDecimalValue = 15.78m; 
    public string MyFormattedValue 
    { 
     get { return _myDecimalValue.ToString("c"); } 
     private set; //makes this a 'read only' property. 
    } 
6

Pruebe esto;

string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234); 

Convierte el formato 123423.083234 a $ 1,23,423.

1

Ahora puede utilizar la interpolación de cadenas y propiedades con cuerpo de expresión en C# 6.

private decimal _amount; 

public string FormattedAmount => $"{_amount:C}"; 
2

Puede crear un método de extensión. Considero que es una buena práctica, ya que es posible que deba bloquear una pantalla de moneda, independientemente de la configuración del navegador. Por ejemplo es posible que desee mostrar $ 5,000.00 siempre en lugar de 5 $ 000,00 (#CanadaProblems)

public static class DecimalExtensions 
{ 
    public static string ToCurrency(this decimal decimalValue) 
    { 
     return $"{decimalValue:C}"; 
    } 
} 
Cuestiones relacionadas