We're currently using the following for creating US dollar values in our web application:
string.Format("{0:C0}", dollarValue );
In this example, if dollarValue is 145, then we'll see: $145. If it is -145, then we'll see ($145) rather than -$145. Note that for us, dollarValue is a double, but it could be any number-type. I think.
Anyway, what I want is for it to be either $145 or -$145.
Now, according to my research, it might be possible to do this using the NumberFormatInfo class. I can't figure out how to use it, and I can't find any valid example. I did see this question here: C# creating a custom NumberFormatInfo to display "Free" when a currency value is $0.00 but the example from MSDN linked to from this question seems a bit different from what I really want to do.
I realize, I will need to do something of the following:
double dollarValue = -145d;
string myMoney = dollarValue.ToString( "C0", someIFormatProvider );
where someIFormatProvider is likely of type NumberFormatInfo. Now, what I've done is this:
NumberFormatInfo ni = new NumberformatInfo();
ni.CurrencyNegativePattern = 1; // The value 1 should mean not to use parenthesis
string myMoney = dollarValue.ToString( "C0", ni );
...and I get an "Instance is Read-Only" exception. While the "documentation" for the CurrencyNegativePattern property says you can SET and GET the value, apparently, you can't. Also, NumberFormatInfo is a sealed class. I can't easily create a new class based off it and override the value.
I'm at a loss as to how to deal with this. Right now, my workaround is to just negate my negative value and have a positive result that I do the string.Format(...)
again. Yes, I realize there is no negative sign in front of this, but, of course, that's easily resolved by adding a "-" in front of the result as needed.
Would someone be able to provide me with a working example of how to effectively use the NumbefFormatInfo class correctly in this situation? Thanks.
See Question&Answers more detail:
os