Monday, April 11, 2011

C# Currency to string

I am querying a data base field that returns a money value, I am assigning this to a string but it is adding extra 00 on the end

e.g.

Returns 30.00 I assign this to a string (string value = Convert.ToString(ReturnValue);) but when I output this is showing as 30.0000

Can you advice me where im going wrong and the best way to approch this.

From stackoverflow
  • You can use string format codes in your ToString call.

  • Try this:

    yourValueHere.ToString("0.00")
    
  • I'd use something like

    string value = ReturnValue.ToString("0.00");
    

    This uses the ToString overload that accepts a format string. The above format string "0.00" specifies two decimal places.

  • Do you want your string formatted using a currency character?

    If so...

    decimal m = 3.4;
    
    string s = string.Format("{0:c}";
    
    // s will be £3.40, $3.40, etc depending on your locale settings
    
  • In SQLServer a money data type is the equivalent of a decimal with 4 decimal places of precision. I would assume this is precision is conserved when the decimal is converted to a string. The best option would be to always use a format string eg "#,##0.00" when doing the conversion.

  • The Money data type has a precision of 4 decimal places. You'll need to either specify the format in the ToString() arguments or you can round off the value before converting to a string.

    If you use .ToString() you're not getting any rounding as far as I know. I think you just lose the digits.

    If you round, you're not just chopping off digits. Here's a sample for rounding (untested code):

    string value = Math.Round(ReturnValue, 2).ToString();
    
  • MartGriff,

    My best advice would be to convert it to a double using the SqlMoney type. From there, you can output it however you would like!

    Here's an example:

    System.Data.SqlTypes.SqlMoney ReturnValue;
    
    //Set your returnValue with your SQL statement
    ReturnValue = ExecuteMySqlStatement();
    
    //Get the format you want
    
    //$30.00
    string currencyFormat = ReturnValue.ToDouble().ToString("c");
    
    //30.00
    string otherFormat = ReturnValue.ToDouble().ToString("0.00");
    

    For more formatting options, check out the MSDN:

    http://msdn.microsoft.com/en-us/library/system.double.tostring.aspx

    Best of luck, I hope this helps.

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.