字符串格式编号,包含三个部分,如String.Format(“{0:$#,## 0.00;($#,## 0.00); Zero}”,value);

时间:2016-01-06 07:07:04

标签: c# number-formatting

我正在实现字符串格式编号,其中包含三个部分

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

即:

input 120 result $120.00
input -120 result ($120.00)
input 0 result ''

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

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

但它没有帮助。

3 个答案:

答案 0 :(得分:3)

也许尝试采用这种方法:

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

var amount = 1342.56m;

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

唯一的缺点是,如果货币符号是该货币的标准,它就不会正确地将货币符号放在数字的末尾。

答案 1 :(得分:1)

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

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

Demo

然而,正如Soner Gonul所观察到的那样,这仍然不会产生''作为0的输出。

答案 2 :(得分:1)

据我所知,没有直接格式可以为这些输入提供3个结果。

对于前两种格式,您可以将The "C" format specifieren-US文化($作为CurrencySymbol)一起使用2作为精确说明符,如;

(120).ToString("C2", CultureInfo.GetCultureInfo("en-US"))  // $120.00
(-120).ToString("C2", CultureInfo.GetCultureInfo("en-US")) // ($120.00)

但对于0,这会生成$0.00,这不是您想要的。

作为更好的解决方案,请检查Enigmativity's answer,而不是处理0值。