Format a double value like currency but without the currency sign (C#)

吃可爱长大的小学妹 提交于 2019-12-18 11:05:09

问题


I feed a textbox a string value showing me a balance that need to be formatted like this:

###,###,###,##0.00

I could use the value.ToString("c"), but this would put the currency sign in front of it.

Any idea how I would manipulate the string before feeding the textbox to achieve the above formatting?

I tried this, without success:

String.Format("###,###,###,##0.00", currentBalance);

Many Thanks,


回答1:


string forDisplay = currentBalance.ToString("N2");



回答2:


If the currency formatting gives you exactly what you want, clone a NumberFormatInfo with and set the CurrencySymbol property to "". You should check that it handles negative numbers in the way that you want as well, of course.

For example:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
        nfi = (NumberFormatInfo) nfi.Clone();

        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
        nfi.CurrencySymbol = "";
        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
    }
}

The other option is to use a custom numeric format string of course - it depends whether you really want to mirror exactly how a currency would look, just without the symbol, or control the exact positioning of digits.




回答3:


Have you tried:

currentBalance.ToString("#,##0.00");

This is the long-hand equivalent of:

currentBalance.ToString("N2");



回答4:


string result=string.Format("{0:N2}", value); //For result like ### ### ##.##




回答5:


You can do this with the group separator and the section separator, like this:

currentBalance.ToString("#,0.00;(#,0.00)");

This does not account for culture variances like the answer from @JonSkeet would, but this does mimic decimal place, rounding, thousands separation, and negative number handling that en-US culture currency format produces using a single custom format string.

.NET Fiddle Demo




回答6:


CultureInfo cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "Rs.";

Thread.CurrentThread.CurrentCulture = cultureInfo;
decimal devimalValue = 3.45M;
this.Text = devimalValue.ToString("C2"); //Rs.3.45



回答7:


This may be overkill, but it rounds, formats...

@helper TwoDecimalPlaces(decimal? val)
{
    decimal x = 0;
    decimal y = 0;
    string clas = "text-danger";
    if (val.HasValue)
    {
        x = (decimal)val;
        if (val > 0)
        {
            clas = "";
        }
    }
    y = System.Math.Round(x, 2);
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty);
    <span class="@clas">@string.Format("{0:N2}", y)</span>
}



回答8:


This simple solution works for me with US currency.

If not needing international currency support use this and replace the $ with the currency symbol(s) to be removed:

// for USD
string result = currentBalance.ToString("C").Replace("$", "")

or

// for EUR
string result = currentBalance.ToString("C").Replace("€", "")


来源:https://stackoverflow.com/questions/1048643/format-a-double-value-like-currency-but-without-the-currency-sign-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!