格式化双倍值,如货币,但没有货币符号(C#)

时间:2009-06-26 11:35:16

标签: c# string format currency

我在文本框中输入一个字符串值,显示需要格式化的余额:

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

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

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

我试过这个,没有成功:

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

非常感谢,

9 个答案:

答案 0 :(得分:62)

如果货币格式为您提供了您想要的内容,请使用NumberFormatInfo克隆并将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));
    }
}

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

答案 1 :(得分:54)

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

答案 2 :(得分:9)

你试过了吗?

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

这是长期的等同于:

currentBalance.ToString("N2");

答案 3 :(得分:5)

string result = string.Format(“{0:N2}”,value); //结果如### ### ##。##

答案 4 :(得分:3)

您可以使用the group separatorthe section separator执行此操作,如下所示:

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

这并不能解释像@JonSkeet那样的文化差异,但这确实模仿小数位,四舍五入,千位分离以及使用单个自定义格式字符串生成的美国文化货币格式的负数处理。 / p>

.NET Fiddle Demo

答案 5 :(得分: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

答案 6 :(得分:2)

var result = currentBalance.ToString("C").Replace(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, "");

答案 7 :(得分: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>
}

答案 8 :(得分:0)

这个简单的解决方案适用于美国货币。

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

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

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