[英]Format a number with commas, but keep decimals
這似乎完全符合您的要求:
public void Code(params string[] args)
{
Print(1000);
Print(100000);
Print(123.456);
Print(100000.21 );
Print(100200.123456);
}
void Print(double n)
{
Console.WriteLine("{0:###,###.#######}", n);
}
1,000
100,000
123.456
100,000.21
100,200.123456
一個舊線程,但沒有一個答案看起來完全令我滿意。 他們中的大多數都將零變成空字符串,包括具有最多upvotes的字符串。
我認為更好的解決方案是"#,##0.#################"
,它至少顯示零。 但它仍然很難看。 肯定有更好的辦法。
double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0,
123456789.123456, 123456789.0,
0.123456789123456 };
foreach (double val in vals)
{
Console.WriteLine(val + ": " + val.ToString("#,##0.#################"));
}
嘗試簡單地使用“#,#”,這會為成千上萬的人添加逗號,但我不知道它是否會保留小數,否則“#,###。########### #########“,或小數點后您想要的任何數量的'#'符號。
試試這個:
VB:
Dim vals() As Double = {1000, 100000, 123.456, 100000.21, 100200.123456}
For Each val As Double in vals
Console.WriteLine(val.ToString("###,###.#########"))
Next val
C#:
double[] vals = new double[] {1000, 100000, 123.456, 100000.21, 100200.123456};
foreach (double val in vals)
{
Console.WriteLine(val.ToString("###,###.#########"));
}
問題是沒有格式來處理任意數量的小數。 但是,由於你只能存儲非常有限的精度,你可以使用它並根據需要添加一些#字符來覆蓋它,假設你願意讓它切斷任何無關緊要的0。
您發布的MSDN鏈接是您要閱讀如何執行此操作的確切位置。
您可以創建自定義格式字符串.ToString(“###,###。######”) 自定義數字格式字符串
這可能有點慢,但它會做你想要的。
public static string FormatNumber(double num)
{
string s = num.ToString();
string result = "";
if(s.IndexOf('.') != -1)
{
result = s.Substring(s.IndexOf('.'));
s = s.Substring(0, s.IndexOf('.'));
}
while (s.Length > 3)
{
result = "," + s.Substring(s.Length - 3);
s = s.Substring(0, s.Length - 3);
}
if (s.Length == 0)
return result.Substring(1);
return s + result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.