繁体   English   中英

具有三部分的String格式数字,如String.Format(“ {0:$#,## 0.00;($#,## 0.00);零}”,值);

[英]String format number with three sections as String.Format(“{0:$#,##0.00;($#,##0.00);Zero}”, value);

我正在用三个部分实现字符串格式编号

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

即:

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

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

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

但这没有帮助。

也许尝试采用这种方法:

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

var amount = 1342.56m;

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

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

您可以使用IFormatProvider重载string.Format ,如下所示:

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

演示

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

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

对于前两种格式,可以使用具有en-US文化"C"格式说明符 (将$作为CurrencySymbol ),并使用2作为精度说明符,例如;

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

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

作为更好的解决方案,请改用Enigmativity的答案 ,该答案也处理0值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM