簡體   English   中英

C#數字格式:顯示n位有效數字?

[英]C# number format: display n significant number of digits?

有沒有辦法格式化一個double值,使它只顯示n個siginifacant數字?

例如,我有一個值為123456的double,我們可以有一個格式字符串,只顯示前3位數字。

double x=12346;
string s=x.ToString("Some format"); //display 123 only

那可能嗎?

雖然有些格式可以讓你刪除部分或全部分數,但是沒有格式可以讓你刪除整個部分的一些有效數字。

如果您想保留整數的前三位數,則需要將該值除以使其整個部分只有三位數。

計算除數的一種方法是記錄10 N,檢查它是否大於2,並將10除以相應的冪:

private static void Print(double x) {
    int n = (int)Math.Log10(x);
    if (n > 2) {
        x /= Math.Pow(10, n-2);
    }
    Console.WriteLine((int)x);
}

演示。

你不能將double的最大部分格式化為3 sig。 圖。 但你可以拆分字符串。 嘗試:

String s = x.ToString().Substring(0, n);

其中n是您希望保留的有效數字的數量。

我為這個例子做了一個控制台應用程序。 我知道你需要一個double或int數據類型的數字,但我不知道如何操縱點后的十進制數,所以我使用了一個字符串(如果你不介意,將數值存儲在字符串數據類型中):

        string number = "";
        string digits = "";
        int n = 0;
        int count = 0;

        number = "45.6";
        //number = "456";
        n = 3;

        if (number.Contains('.')) //If the number has decimals...
        {
            if (n < number.Length)
            {
                if (number.IndexOf('.') < n)
                {
                    while (count <= n) //... we will count the number in a different way.
                    {
                        if (number[count] != '.')
                        {
                            digits = digits + number[count];
                        }

                        count++;
                    }
                }
                else
                {
                    while (count < n)
                    {
                        if (number[count] != '.')
                        {
                            digits = digits + number[count];
                        }

                        count++;
                    }
                }
            }
        }
        else
        {
            if (n <= number.Length)
            {
                while (count < n) //If not, we count without the decimal point.
                {
                    digits = digits + number[count];
                    count++;
                }
            }
        }

        Console.WriteLine("N significant digits: " + digits);

您可以嘗試使用十進制和整數,但在代碼中,它們都是字符串。 正如我之前所說,如果您不介意使用此數據類型,此示例將幫助您,如果沒有,您可以嘗試使用String類中的“Substring”函數。

暫無
暫無

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

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