Как получить десятичную точность до n знаков в программе на C # для Pi - PullRequest
3 голосов
/ 05 мая 2011

С этим вопросом Пи в C #

Я кодировал приведенный ниже код и выводил с последними 6 цифрами как 0. Поэтому я хочу улучшить программу, преобразовав все в десятичное число. Я никогда раньше не использовал десятичный в C # вместо double, и мне комфортно только с двойным в моем обычном использовании.

Так что, пожалуйста, помогите мне с десятичным преобразованием, я попытался заменить все двойные на десятичные при запуске, и это не получилось :(.

 using System;

class Program
{
    static void Main()
    {
    Console.WriteLine(" Get PI from methods shown here");
    double d = PI();
    Console.WriteLine("{0:N20}",
        d);

    Console.WriteLine(" Get PI from the .NET Math class constant");
    double d2 = Math.PI;
    Console.WriteLine("{0:N20}",
        d2);
    }

    static double PI()
    {
    // Returns PI
    return 2 * F(1);
    }

    static double F(int i)
    {
    // Receives the call number
   //To avoid so error
    if (i > 60)
    {
        // Stop after 60 calls
        return i;
    }
    else
    {
        // Return the running total with the new fraction added
        return 1 + (i / (1 + (2.0 * i))) * F(i + 1);
    }
    }
}

Выход

Получить PI из методов, показанных здесь 3.14159265358979000000 Получить PI из константы класса .NET Math 3,14159265358979000000

1 Ответ

4 голосов
/ 05 мая 2011

Что ж, замена double на decimal - это хорошее начало - и тогда все, что вам нужно сделать, это изменить константу с 2,0 до 2,0 м:

static decimal F(int i)
{
    // Receives the call number
    // To avoid so error
    if (i > 60)
    {
        // Stop after 60 calls
        return i;
    }
    else
    {
        // Return the running total with the new fraction added
        return 1 + (i / (1 + (2.0m * i))) * F(i + 1);
    }
}

Конечно, это все еще будетимеют ограниченную точность, но чуть больше double.Результат 3.14159265358979325010.

...