簡體   English   中英

用逗號格式化數字,但保留小數

[英]Format a number with commas, but keep decimals

我想將數字分組為數千,但也輸出,但小數位數實際上是數字。 我無法弄清楚格式字符串。

 1000 => 1,000
 100000 => 100,000
 123.456 => 123.456
 100000.21 => 100,000.21
 100200.123456 => 100,200.123456

免責聲明(它並不像您想象的那樣直截了當):

  • 請不要指出這個問題它沒有回答我的問題
  • 請不要指向MS DN ,文章沒有幫助我。 (如果您認為我讀錯了,請自己閱讀並發布正確答案)
  • .ToString("n")不起作用,它將數字四舍五入

這似乎完全符合您的要求:

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.

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