54

我给一个文本框提供了一个字符串值,显示了一个需要像这样格式化的余额:

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

我可以使用 value.ToString("c"),但这会将货币符号放在它前面。

知道在输入文本框之前如何操作字符串以实现上述格式吗?

我试过这个,没有成功:

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

非常感谢,

4

9 回答 9

69

如果货币格式完全符合您的要求,请克隆一个NumberFormatInfowith 并将CurrencySymbol属性设置为“”。当然,您应该检查它是否也以您想要的方式处理负数。

例如:

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));
    }
}

当然,另一种选择是使用自定义数字格式字符串 - 这取决于您是否真的想准确地反映货币的外观,只是没有符号,或者控制数字的确切位置。

于 2009-06-26T11:39:17.990 回答
65
string forDisplay = currentBalance.ToString("N2");
于 2009-06-26T11:39:35.527 回答
11

你有没有尝试过:

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

这相当于:

currentBalance.ToString("N2");
于 2009-06-26T11:40:33.790 回答
5

字符串结果=string.Format("{0:N2}", value); //对于像### ### ##.##这样的结果

于 2010-10-20T08:36:55.303 回答
4

您可以使用组分隔符部分分隔符来执行此操作,如下所示:

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

这并没有像@JonSkeet 的答案那样考虑文化差异,但这确实模仿了使用单个自定义格式字符串生成的 en-US 文化货币格式产生的小数位、舍入、千位分隔和负数处理。

.NET 小提琴演示

于 2015-03-11T16:03:27.577 回答
2
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
于 2010-10-11T09:24:28.803 回答
2
var result = currentBalance.ToString("C").Replace(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, "");
于 2020-09-04T05:04:28.357 回答
0

这可能是矫枉过正,但它回合,格式......

@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>
}
于 2016-11-30T20:49:44.860 回答
0

这个简单的解决方案适用于我使用美元。

如果不需要国际货币支持,请使用此选项并将 $ 替换为要删除的货币符号:

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

或者

// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
于 2017-05-26T14:05:53.960 回答