Shawn
Shawn

Reputation: 509

String Formatting with currency double values not displaying correctly.

I'm using MVC3 with a detailed view that needs to display a formatted dollar amounts like $1,200.00. The controller is passing in a double value in this case for MonthlyMortgage to the view. The line of code below however, does not display the correct string formatting. What is displayed is $1200.00, and what I need is $1,200.00.

I have tried:

[email protected]("{0:c}", Html.DisplayFor(model => model.MonthlyMortgage))

and I have tried this:

[email protected]("{0:#,###,###,##0.000}", Html.DisplayFor(model => model.MonthlyMortgage))

Can someone please enplane why this is not working?

Upvotes: 10

Views: 13254

Answers (3)

smoore4
smoore4

Reputation: 4866

Another option is the [DataType] attribute.

Add DataAnnotations using System.ComponentModel.DataAnnotations; and using System.ComponentModel.DataAnnotations.Schema then you can do something like this in the model.

[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal MonthlyMortgage{ get; set; }

Upvotes: 0

Henk Holterman
Henk Holterman

Reputation: 273179

@nemesv has a direct answer. The other option would be to remove String.Format() from the View and use DataAnnotations to attach a formatting to MonthlyMortgage.

An example from MSDN:

[DisplayFormat(DataFormatString = "{0:C}")]
public Decimal ListPrice { get; set; }

And btw, #,###,###,##0.000 can be shortened to #,##0.00

Upvotes: 11

nemesv
nemesv

Reputation: 139748

You don't need to use Html.DisplayFor because it will return MvcHtmlString so the string.Format doesn't apply.

Just use the string.Format on your model:

@String.Format("{0:c}", Model.MonthlyMortgage)

Note you don't need the '$' sign anymore because the {0:c} will take care of it.

Upvotes: 21

Related Questions