【问题标题】:Default number format for ToStringToString 的默认数字格式
【发布时间】:2014-03-29 06:56:05
【问题描述】:

是否可以在不指定格式字符串的情况下将integer(或double 等)转换为String 时使用的默认数字格式?

C# 示例:

int i = 123456;

string s = "Hello " + i;
// or alternatively with string.Format without format definition
string s = string.Format("Hello {0}", i);

ASP.NET Razor 示例:

<div>
    Hello @i
</div>

我认为所有这些代码行都隐含地使用了Int32 的默认ToString() 方法。毫不奇怪,所有这些代码行都会导致"Hello 123456",但我想要"Hello 123,456"

那么我是否可以指定默认使用"N0"(至少对于integer)?

我已经找到了Set Default DateTime Format c# 的问题 - 看起来不错,但它对我的数字没有帮助。


编辑: 我知道我可以编写一个可以在整个应用程序中使用的扩展方法,但这不是我想要的。我想找到一个属性(可能隐藏在CultureInfoNumberFormatInfo 中),它当前设置为"G",默认使用Int32.ToString() 实现。

【问题讨论】:

  • 你能用cultureInfo.NumberFormat做点什么吗,就像你的示例网址使用DateTimeFormat一样?
  • 这可能有点太宽泛了。根据上下文,可以执行此操作。对于 MVC,您可以创建一个 DisplayTemplate 并使用 @Html.DisplayFor。对于某些 WinForms 控件,您可以在类属性上指定属性。
  • @TomBrown 不,这就是我发布问题的原因。 :-)
  • 为什么不自定义 CultureInfo.CurrentCulture.NumberFormat?例如。 CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator = ".";

标签: c# .net cultureinfo number-formatting


【解决方案1】:

如果您创建自己的 CultureInfo 并且可以对其进行更改,然后将其分配给 CultureInfo.CurrentCulture,就像在这个答案中一样:

https://stackoverflow.com/a/24785761/166921

【讨论】:

  • 好主意,但不幸的是,这对我没有帮助,因为CultureInfo 不是这里的问题。使用了正确的文化,但默认的ToString 实现使用G 格式而不是我想要的格式(N0)。
  • @fero 恐怕这不是可定制的。总是G。而CultureInfoG 格式影响不大(可以更改分隔符但不能更改小数位数)。
【解决方案2】:

当您尝试修改没有类的基本类型的功能时,您不能覆盖 ToString() 方法。

但是,您可以创建扩展方法。

namespace System
{

    public class IntExt
    {
        public string ToStringN0(this int i)
        {
            return i.ToString("N0");
        }
    }

}

然后被使用

int i = 5000;
Console.WriteLine(i.ToStringN0());

该示例将类放在 System 命名空间中,因此它可以通过应用程序使用。

【讨论】:

    【解决方案3】:

    你可以使用扩展方法

    public static class MyExtensions
    {
        public static string ToDefaultFormatString(this int i)
        {
            //Staf
        }
    }
    

    你的代码看起来像

    int i = 123456;
    
    string s = "Hello " + i.ToDefaultFormatString();
    

    【讨论】:

    • 但这不是他想要达到的目标——他很清楚他试图控制 int 上 ToString() 的结果。
    【解决方案4】:

    您可以将系统 toString() 方法覆盖到您的类中,如下所示:

     public override string ToString()
        {
        int i = 123456;
            string s = "Hello " + i;
          return string.Format("Hello {0}", i);
        }
    

    【讨论】:

    • 我没有课。我想为每个 integer 指定默认格式。
    • 除了@fero 的评论,即使他想,他也不能继承int
    【解决方案5】:

    【讨论】:

    • 不,这对我一点帮助都没有。我已经知道默认使用"G" 格式。但他们没有说任何关于指定另一种默认格式的内容。
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多