.NET支持两种类型的字符串格式。
我处于现有配置数据具有#,##0
样式格式的情况。新功能需要格式化为相同的输出,但此功能所需的API仅接受{0:n2}
类型的格式。
有没有人知道在数字类型的这两种表示之间进行转换的方法? DateTime
可以忽略。
编辑我已经了解到:
{0:n2}
样式称为standard numeric formatting
#,##0
样式称为custom numeric formatting
答案 0 :(得分:2)
不,你不能。
从link to the MSDN articles about standard format字符串中,您会找到:
实际负数模式, 数组大小,千分隔符, 和小数分隔符由。指定 当前的NumberFormatInfo对象。
因此,标准格式说明符将根据程序运行的文化而有所不同。
由于您的自定义格式化确切地指定了数字的外观,无论该程序运行的文化如何。它总是看起来一样。
运行程序的文化在编译期间是未知的,它是一个运行时属性。
所以答案是:不,你不能自动映射,因为没有一对一的一致映射。
答案 1 :(得分:0)
HACK ALERT !!!
作为Arjan pointed out in his excellent answer我想要做的事情是不可能在所有语言环境中采用防弹方式(感谢Arjan)。
就我的目的而言,我知道我只处理数字,而我所关注的主要问题是具有相同的小数位数。所以这是我的黑客。
private static string ConvertCustomToStandardFormat(string customFormatString)
{
if (customFormatString == null || customFormatString.Trim().Length == 0)
return null;
// Percentages do not need decimal places
if (customFormatString.EndsWith("%"))
return "{0:P0}";
int decimalPlaces = 0;
int dpIndex = customFormatString.LastIndexOf('.');
if (dpIndex != -1)
{
for (int i = dpIndex; i < customFormatString.Length; i++)
{
if (customFormatString[i] == '#' || customFormatString[i] == '0')
decimalPlaces++;
}
}
// Use system formatting for numbers, but stipulate the number of decimal places
return "{0:n" + decimalPlaces + "}";
}
答案 2 :(得分:0)
用于将数字格式化为2位小数
string s = string.Format("{0:N2}%", x);