[英]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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.