Jan*_*ich 14 .net globalization cultureinfo
我想确保我的应用程序中的某些数字打印时没有任何分隔符,分组等,无论当前环境如何.似乎以下两种方法产生相同的结果(可能更多):
123456789.ToString("0");
123456789.ToString(CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
你知道任何边缘情况或怪癖吗?哪一个更"正确"?你会用哪一个?
我曾经使用过第二个,但最近我发现了第一个,并开始使用它,因为它不需要额外的using System.Globalization.
Jan*_*ich 22
根据这里的答案和讨论,我做了一些调查.这是我发现的:
当您使用12345678.ToString()不带任何参数时,.NET使用通用格式说明符"G",它仅受NumberFormatInfo.NegativeSign,NumberFormatInfo的影响.NumberDecimalSeparator,NumberFormatInfo.NumberDecimalDigits和NumberFormatInfo.PositiveSign.对我来说,这表明在任何文化中12345678.ToString()都应该总是产生"12345678".
如果要分隔数字,则需要使用数字格式说明符"N"(当然,或者提供自定义格式字符串).数字分组也适用于"C"和"P".
该固定区域性不确实指定数字分组(由3个数字,当然)和数字分隔.因此123456789.ToString(CultureInfo.InvariantCulture)产生"123456789" 的原因不是因为不变文化,而是因为默认的通用数字格式说明符"G".
所以我想说结论是不用担心任何额外的论点并且只是使用:
12345678.ToString()
Run Code Online (Sandbox Code Playgroud)
我认为这是所有案例中最好的,因为这意味着通常你甚至不需要调用,ToString()因为大多数打印/写入函数接受各种各样的参数并ToString()为你做.
这两种方法不等同:第一种方法是使用CurrentCulture.这可能会导致某些文化中出现额外的点/逗号(我没有例子).
使用InvariantCulture时,您确定始终使用相同的格式.
编辑:并且,如果您使用CodeAnalysis,那么当您不使用CultureInfo时会抱怨.
如果您想确保指定“无论如何都没有格式”,我个人认为您拥有的第一个选项:
123456789.ToString("0");
Run Code Online (Sandbox Code Playgroud)
更好地传达意图。缺点是如果区域性覆盖了您正在使用的数字类型的格式字符串“0”。
| 归档时间: |
|
| 查看次数: |
20752 次 |
| 最近记录: |