【问题标题】:Specify default format for Decimal.ToString() method指定 Decimal.ToString() 方法的默认格式
【发布时间】:2014-10-27 00:09:19
【问题描述】:

我有一个对Decimal.ToString(void) 进行大量调用的应用程序。默认格式不是我们所需要的。我可以将这些调用更改为另一个Decimal.ToString overloads,但如果我不必这样做会更好。那么,有没有办法为 Decimal.ToString(void) 方法指定不同的格式,这样我就不必修改对该方法的任何调用?

更新

正如下面的答案所示,可以做我想做的事,但我不应该这样做,因为这不是好的编程习惯。有许多替代方法涉及重写调用;我计划采用的方法是将所需格式存储为字符串常量并将其传递给调用:

class Example
{
    const string s_DecimalFormat = "N2";

    private decimal myDecimal1 = 12.345;
    private decimal myDecimal2 = 6.7;

    public void Method()
    {
        System.Console.WriteLine(myDecimal1.ToString(s_DecimalFormat));
        System.Console.WriteLine(myDecimal2.ToString(s_DecimalFormat));
    }
}

【问题讨论】:

    标签: .net formatting decimal tostring


    【解决方案1】:

    理论上,如果您将System.Globalization.CultureInfo.CurrentCulture 更改为您想要的小数格式,这将起作用。它会打开一个巨大罐你不想用十英尺长的杆子碰的虫子。 不要这样做。 更改所有呼叫。也许为它写一个方法。

    【讨论】:

    • 您愿意解释一下为什么更改CultureInfo.CurrentCulture 不是一个好主意吗?
    • @DanStevens 主要是因为它改变了整个程序。如果您不传递另一个 FormatProvider,许多方法会在内部使用它。我猜OP没有。此外,其他程序员也无法预料到更改just十进制格式。这违反了最小意外原则。把它改成另一种文化是一回事,在内部改变一种文化或自己编造自己的文化是不好的。
    【解决方案2】:

    扩展方法在这里可能会很好。比如:

    public static string ToMyString(this decimal value)
    {
       return value.ToString("your formatting");
    }
    

    我同意 @nvoigt 的观点,即更改全球化设置是个坏主意

    【讨论】:

    • 不是我想要的;我希望避免重写对ToString(void) 的任何调用——这将涉及用ToMyString() 替换这些调用。
    【解决方案3】:

    您可以编写自己的扩展方法。举个例子:

    public class Test
    {
    
        private void DoStuff()
        {
    
            Decimal d = new Decimal();
            d = 0.5M;
    
            Console.WriteLine("{0}", d);
            Console.WriteLine("{0}", d.ToCustomString());
    
        }
    
    }
    
    public static class Extensions
    {
        public static string ToCustomString(this Decimal number)
        {
            return string.Format("Blah {0}", number.ToString());
        }
    }
    

    输出:

    0.5
    Blah 0.5
    

    当使用 Decimal.ToCustomString 而不是 ToString 时,至少在这种情况下,小数以“Blah”开头

    您可以按照您想要返回的格式编写扩展方法,前提是您需要使用扩展方法而不是 .ToString()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多