簡體   English   中英

覆蓋十進制ToString()方法

[英]Override decimal ToString() method

我的數據庫中有一個十進制數據類型,精度為(18,8),即使它的值僅為14.765,當我使用Response.Write將其值返回到網頁時,它仍將顯示為14.76500000。

是否可以覆蓋其默認的ToString方法,以#,###,##0.########格式返回數字,以便它只顯示相關的小數位?

UPDATE

我假設當一個頁面輸出數字如<%= item.price %> (其中item.price是一個數字)時,正在調用該數字的ToString方法?

我試圖通過以某種方式默認ToString()格式來避免必須更改顯示值的每個實例。

您不想重寫ToString() ,您想調用ToString()並指定IFormatProvider格式化String

您不能為小數類型覆蓋ToString,因為它是一個結構

但您可以使用擴展方法來執行此操作:

public static class DecimalExtensions
{
      public static string ToString(this decimal some, bool compactFormat)
      {
            if(compactFormat) 
            {
                return some.ToString("#,###,##0.########");
            }
            else
            {
                return some.ToString();
            }
      }
}

所以現在你可以這樣做:

string compactedDecimalText = 16.38393m.ToString(true);

我遇到了和你一樣的問題。 人們希望在整個應用程序中以瘋狂的自定義方式格式化小數。

我的第一個想法是在Decimal周圍創建一個包裝器並覆蓋ToString()方法。

雖然您不能從Decimal繼承,但您可以創建一個隱式轉換為Decimal的類型。

這會在Decimal前面創建一個外觀,並為您提供編寫自定義格式邏輯的位置。

以下是我可能的解決方案,讓我知道這是否有效或者這是一個可怕的想法。

public struct Recimal
{

    private decimal _val;
    public Recimal(decimal d) { _val = d; }

    public static implicit operator Recimal(decimal d)
    {
        return new Recimal(d);
    }

    public static implicit operator Decimal(Recimal d)
    {
        return d._val;
    }

    public override string ToString()
    {
        //if negative, show the minus sign to the right of the number
        if (_val < 0)
            return String.Format("{0:0.00;0.00-;}", _val);

        return _val.ToString();
    }

}

它就像一個十進制:

        Decimal d = 5;
        Recimal r = -10M;
        Recimal result = r + d;

        //result: 5.00-
        textBox1.Text = result.ToString();

為什么不直接在double上使用string.Format()

以下是格式化選項的一些參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM