首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ToString("0")与ToString(CultureInfo.InvariantCulture)

ToString("0")与ToString(CultureInfo.InvariantCulture)
EN

Stack Overflow用户
提问于 2009-09-28 15:00:00
回答 7查看 23.4K关注 0票数 17

我想确保在我的应用程序中打印的某些数字没有任何分隔符,分组等,无论当前环境是什么。以下两种方法似乎产生了相同的结果(可能还有更多):

代码语言:javascript
复制
123456789.ToString("0");
123456789.ToString(CultureInfo.InvariantCulture);

你有没有注意到任何边缘情况或怪癖?哪一个更“正确”?你会用哪一个?

我曾经使用第二个,但最近我找到了第一个,并开始使用它,因为它不需要额外的using System.Globalization

EN

回答 7

Stack Overflow用户

发布于 2009-09-29 09:44:42

基于这里的答案和讨论,我做了更多的调查。这是我发现的:

  • 当您使用不带任何参数的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“。

所以我要说的结论是,这是完全可以的,不用担心会有任何额外的参数,只需使用

代码语言:javascript
复制
12345678.ToString()

我认为这是所有情况中最好的,因为这意味着通常您甚至不需要调用ToString(),因为大多数打印/写入函数接受各种参数并为您执行ToString()

票数 26
EN

Stack Overflow用户

发布于 2009-09-28 15:07:49

这两种方法并不等价:第一种是使用CurrentCulture。在某些区域性中,这可能会导致额外的点/逗号(我没有示例)。

当您使用InvariantCulture时,您可以确定始终使用相同的格式。

编辑:而且,如果你使用CodeAnalysis,当你不使用CultureInfo时就会抱怨。

票数 9
EN

Stack Overflow用户

发布于 2015-02-10 00:36:16

(大约5年后...)

我正在查找这个确切的问题,但是由于没有公认的答案,即使Jan Zich是正确的,我想我应该放一个小例子来测试这个问题。

我还要说,.ToString()、.ToString("0")和.ToString(任何文化信息)(就整数和小数而言)之间没有区别。

代码语言:javascript
复制
var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
    .Except(CultureInfo.GetCultures(CultureTypes.SpecificCultures));

foreach(var c in cultures){
    var num = (int.MinValue);/*
    var num = (int.MaxValue);/*
    var num = (decimal.MinValue);/*
    var num = (decimal.MaxValue);/*
--*/

    var s1 = num.ToString("0") ;
    var s2 = num.ToString(c);
    if(s1 != s2){
        var s = string.Format("{2}:  {0}    {1}",s1,s2,c);
        s.Dump();
    }
}

LinqPad snippet

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1487532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档