我需要格式化號碼,以便有一個逗號分隔條件上爲任意數量的千位和包括大量如10000 10000變成一個萬元9999 remaains爲9999格式化用逗號
我想使用格式字符串來做到這一點,因爲我不想測試數據以查看它的範圍。
有誰知道如何做到這一點?
我需要格式化號碼,以便有一個逗號分隔條件上爲任意數量的千位和包括大量如10000 10000變成一個萬元9999 remaains爲9999格式化用逗號
我想使用格式字符串來做到這一點,因爲我不想測試數據以查看它的範圍。
有誰知道如何做到這一點?
格式字符串不能表現不同爲不同的值,所以你能做的最好的是:
int n;
string s = n >= 10000 ? n.ToString("n0") : n.ToString("d");
(這將使用用戶的文化,傳遞INumberFormatInfo
/CultureInfo
如果需要不同的文化)
num > 9999 ? num.ToString("N0", CultureInfo.InvariantCulture) : num.ToString();
「NO」 假設你不想d ecimals。 NFormat
我會建議創建自己的IFormatProvider具有快速長度檢查和格式它與千位分隔符正常,如果是五個或更多字符,或無千位分隔符,如果是四個或更少的字符。
您可以輕鬆地修改MSDN docs on IFormatProvider中的示例。
必須在某個級別進行範圍檢查。如果實現像這樣,可以嵌入的範圍內的格式框架在一定程度內檢查,繞過默認格式(包括組分隔符)如果所述數目少於5個數字:
class MyFormat : System.IFormatProvider, ICustomFormatter
{
#region IFormatProvider Members
public object GetFormat(Type formatType)
{
return this;
}
#endregion
#region ICustomFormatter Members
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (arg is double)
if (((double)arg >= 10000) || ((double)arg <= -10000))
return ((double)arg).ToString(format);
else
return ((double)arg).ToString("R");
if (arg is decimal)
if (((decimal)arg >= 10000) || ((decimal)arg <= -10000))
return ((decimal)arg).ToString(format);
else
return ((decimal)arg).ToString("R");
return arg.ToString();
}
#endregion
}
class Program
{
static MyFormat gFormat = new MyFormat();
static void Main(string[] args)
{
double dblVal1 = 9999, dblVal2 = 123456;
Console.WriteLine(String.Format(gFormat, "{0:N0} {1:N0}", dblVal1, dblVal2));
}
}
的OP明確規定他們「不想測試數據以查看它的範圍」。不過,這是最明智的做法,所以+1。 – LukeH 2009-09-01 23:28:58
嗯......我認爲我的解決方案更接近於尊重不需要進行範圍檢查的請求。 – BlueMonkMN 2009-09-02 00:02:25
順便提一下,如果您除以正數,負數和零,您*可以*執行多種格式。看到這裏:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator你不能這樣做除了那些部門。 – 2009-09-02 00:14:50