20

As the title suggests - I have a value in my viewmodel that is decimal. I have no control over that. I'd like to display it as currency using the Razor View Engine.

$@String.Format("{0:0.00}", 1005.3422)

gets me part way there with:

$1005.34

but how can I get the commas in there?

Thanks

BKahuna
  • 203
  • 1
  • 2
  • 4

5 Answers5

31

Can you use {0:c} instead? This is just standard string formatting in .NET and the "c" is for currency. There are lots of standard numeric string formats. And, of course, custom formatting, too.

Sumo
  • 4,066
  • 23
  • 40
  • 1
    You know, I swear I'd tried that before (or I wouldn't have posted such a silly question). Either way, I tried it now and {0:c} works perfectly. Many Thanks – BKahuna Aug 17 '11 at 03:11
4
$ @String.Format("{0:#,##0.00}", 1005.3422)
serge
  • 13,940
  • 35
  • 121
  • 205
Steve
  • 59
  • 1
  • 1
    Can you describe your solution? No one will understand that unformatted line of code (intent your code with 4 spaces) – msrd0 Sep 11 '14 at 19:44
3

Most of the time, when you don't get the character you're expecting with strings conversion, it can be a locale issue. For exemple, you're developing with a en-us locale, but someone comes with a fr-FR locale. Then the date, currency, etc will be formatted and parsed differently.

Sebastien F.
  • 1,613
  • 2
  • 23
  • 40
  • See this related question: http://stackoverflow.com/questions/10416553/string-format-currency – Kevin Feb 22 '13 at 20:33
3

Ideally you'd be fetching the view data from some model e.g. public decimal ItemPrice { get; set; }

In which case the Razor expression in your view could be @Model.ItemPrice.ToString("c")

The same can be used for simple ViewBag items, e.g. @ViewBag.ItemPrice.ToString("c")

AussieDev81
  • 454
  • 5
  • 11
1

Or you can add at class definition

[DisplayFormat(DataFormatString = "{0:#,##0.00}")]
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103