C#数字格式:显示n位有效数字?

时间:2016-04-17 12:05:33

标签: c# .net string format

有没有办法格式化一个double值,只显示n个siginifacant数字?

例如我有一个值为123456的double,我们可以有一个格式字符串,只显示前3位数字。

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

可能吗?

3 个答案:

答案 0 :(得分:0)

虽然有些格式可以让你删除部分或全部分数,但是没有任何格式可以让你删除整个部分的一些有效数字。

如果您想保留整数的前三位数,则需要对该值进行除法,使其整个部分只有三位数。

计算除数的一种方法是记录log 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);
}

Demo.

答案 1 :(得分:0)

您不能将double的最大部分格式化为3 sig。图。但你可以拆分字符串。尝试:

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

n是您希望保留的重要数字的数量。

答案 2 :(得分:0)

我为这个例子制作了一个控制台应用程序。我知道你需要一个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);

您可以尝试使用十进制和整数,但在代码中,它们都是字符串。正如我之前所说的,如果您不介意使用这种数据类型,这个例子将帮助您,如果没有,您可以尝试使用&#34; Substring&#34; String类中的函数。