指定Decimal.ToString()方法的默认格式

时间:2014-09-02 16:36:53

标签: .net formatting decimal tostring

我的应用程序有很多调用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));
    }
}

3 个答案:

答案 0 :(得分:0)

从理论上讲,如果您将System.Globalization.CultureInfo.CurrentCulture更改为以您希望的方式格式化小数的内容,则可以使用。它将打开一个巨大的罐头蠕虫,你不想用10英尺的杆子接触它。 不要这样做。更改所有通话。也许为它写一个方法。

答案 1 :(得分:0)

这里的扩展方法可能不错。类似的东西:

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

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

答案 2 :(得分:0)

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

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()