繁体   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