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

Hou*_*man 50 c# string format currency

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

###,###,###,##0.00
Run Code Online (Sandbox Code Playgroud)

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

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

我试过这个,没有成功:

String.Format("###,###,###,##0.00", currentBalance);
Run Code Online (Sandbox Code Playgroud)

非常感谢,

Jon*_*eet 65

如果货币格式为您提供了您想要的内容,请克隆一个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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我不认为这种设置CurrencySymbol =""的技术是完全正确的.如果CurrencyNegativePattern为8,11,12,13,14或15,则输出中有一个额外的空格.我认为这是@BenjaminWegman关于修剪空间的想法,但是例如CurrencyNegativePattern 14 with CurrencySymbol =="$"将给出"($ 1,234.56)而CurrencySymbol ==""将给出"(1,234.56)"时"(1,234.56) )"很可能是相反的. (6认同)
  • @BenjaminWegman:我认为,如果对文化敏感的货币格式包含空格,则出于某些良好的理由而存在。 (2认同)

Luk*_*keH 57

string forDisplay = currentBalance.ToString("N2");
Run Code Online (Sandbox Code Playgroud)

  • 这是不可接受的,因为如果文化中货币的负号是()而小数的负号是 - ,则货币表示将是不正确的. (11认同)
  • @LukeH,Bob提出了一个很好的观点,我不觉得问题正文是"你如何格式化一个带有2个小数点和逗号的数字." 我以为你放弃了他的担忧.但是,这只是原因的一部分."这是公认的答案,因此根据定义,OP是可接受的"似乎很讽刺,我觉得它不会为社区增添太多.事实上,如果他/她知道这些缺点,OP很可能还没有接受你的答案,而且,IMO只是试图指出这一点. (7认同)
  • @Bob:这是公认的答案,因此根据定义,OP可以接受.由于没有"格式像货币但没有货币符号"的内置格式说明符,在这种情况下需要进行某种手动处理:*(1)*根据Jon的答案使用自定义`NumberFormatInfo`,*(2)*使用自定义格式字符串,或*(3)*调用`ToString("c")`然后进行后处理以删除符号. (2认同)

Gar*_*ler 10

你有没有尝试过:

currentBalance.ToString("#,##0.00");
Run Code Online (Sandbox Code Playgroud)

这是长期相当于:

currentBalance.ToString("N2");
Run Code Online (Sandbox Code Playgroud)


小智 5

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