C# 字符串格式编号,三部分为String.format(“;{0:$#,##0.00;($#,###0.00);Zero}”;,value);

C# 字符串格式编号,三部分为String.format(“;{0:$#,##0.00;($#,###0.00);Zero}”;,value);,c#,number-formatting,C#,Number Formatting,我用三个部分实现字符串格式number,如下所示 DataFormatString="{}{0:$#,##0.00;($#,##0.00);''}" i、 e: 问题是美元符号是硬编码的,我希望我的应用程序能够全球化。我试过这样的方法: DataFormatString="{}{0:C;C;''}" 但是它没有帮助。您可以将string.Format的重载与IFormatProvider一起使用,如下所示: string DataFormatString="{0:C}"; string ou

我用三个部分实现字符串格式number,如下所示

DataFormatString="{}{0:$#,##0.00;($#,##0.00);''}"
i、 e:

问题是美元符号是硬编码的,我希望我的应用程序能够全球化。我试过这样的方法:

DataFormatString="{}{0:C;C;''}"

但是它没有帮助。

您可以将
string.Format
的重载与
IFormatProvider
一起使用,如下所示:

string DataFormatString="{0:C}";
string output = string.Format(CultureInfo.CreateSpecificCulture("culture"),DataFormatString,input)


但是,正如Soner Gonul所观察到的,这仍然不会生成“”作为0的输出。

您可以将
string.Format
的重载与
IFormatProvider一起使用,如下所示:

string DataFormatString="{0:C}";
string output = string.Format(CultureInfo.CreateSpecificCulture("culture"),DataFormatString,input)


然而,正如Soner Gonul所观察到的,这仍然不会生成“”作为0的输出。

据我所知,没有直接的格式为这些输入提供您想要的3个结果

对于前两种格式,您可以将
2
用作精度说明符,例如,与
en-US
区域性(以
$
为a)一起使用

(120).ToString("C2", CultureInfo.GetCultureInfo("en-US"))  // $120.00
(-120).ToString("C2", CultureInfo.GetCultureInfo("en-US")) // ($120.00)
但是对于
0
,这会生成
$0.00
,这不是您想要的


作为一个更好的解决方案,请检查哪个处理
0
值。

据我所知,没有直接的格式为这些输入提供您想要的3个结果

对于前两种格式,您可以将
2
用作精度说明符,例如,与
en-US
区域性(以
$
为a)一起使用

(120).ToString("C2", CultureInfo.GetCultureInfo("en-US"))  // $120.00
(-120).ToString("C2", CultureInfo.GetCultureInfo("en-US")) // ($120.00)
但是对于
0
,这会生成
$0.00
,这不是您想要的


作为一个更好的解决方案,请检查哪个处理
0
值。

或许可以尝试采用以下方法:

var DataFormatString="$#,##0.00;($#,##0.00);''";

var amount = 1342.56m;

var formatted =
    amount
        .ToString(DataFormatString)
        .Replace("$", CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);

唯一的缺点是,如果这是该货币的标准,则无法将货币符号正确放置在数字的末尾。

或许可以尝试采用这种方法:

var DataFormatString="$#,##0.00;($#,##0.00);''";

var amount = 1342.56m;

var formatted =
    amount
        .ToString(DataFormatString)
        .Replace("$", CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
唯一的缺点是,如果这是该货币的标准,它不会正确地将货币符号放在数字的末尾。

遗憾的是,这仍然为
0
生成
$0.00
:(遗憾的是,这仍然为
0
生成
$0.00
:(