Считывание значения Double из .txt файла - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток.При работе с очень большими числами столкнулся с такой проблемой, что при считывании числа из текстового документа в переменную типа double не происходит округления до ближайшего целого, а при подсчёте этого же числа округление происходит. Из-за этого становится невозможным сравнение этих чисел. Подскажите, можно ли это исправить?
static void Main(string[] args)
        {
            double a = 0;
            double b = 1;
            bool tf = true;
            int colvo = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < colvo; i++)
            {
                if (tf == true)
                {
                    a = a + b;
                    tf = false;
                }
                else
                {
                    b = b + a;
                    tf = true;
                }
            }
            double z = Convert.ToDouble(File.ReadAllText("data.txt"));
            if (tf != true)
            {
                Console.WriteLine("F = {0}\nZ = {1}",b,z);
            }
            else
            {
                Console.WriteLine("F = {0}\nZ = {1}",a,z);
            }
            Console.ReadKey();
        }
Число:61850783159066

7

69282123... (661 число Фибоначчи) Подсчёт:6,1850783159066

7

Е+137 Читает из файла: 6,1850783159066

8

Е+137 Спасибо!

Решение задачи: «Считывание значения Double из .txt файла»

textual
Листинг программы
using System;
using IntXLib;
 
namespace ConsoleApplicationZ
{
    class Program
    {
        struct mtx2x2
        {
            public IntX _11, _12, _21, _22;
            public static mtx2x2 operator *(mtx2x2 lhs, mtx2x2 rhs)
            {
                var m = MultiplyMode.Classic;
                return new mtx2x2
                {
                    
                    _11 = IntX.Multiply(lhs._11 ?? 0 , rhs._11 ?? 0, m ) + IntX.Multiply(lhs._12 ?? 0 , rhs._21 ?? 0, m),
                    _12 = IntX.Multiply(lhs._11 ?? 0 , rhs._12 ?? 0, m) + IntX.Multiply(lhs._12 ?? 0 , rhs._22??0, m),
                    _21 = IntX.Multiply(lhs._21 ?? 0 , rhs._11 ?? 0, m) + IntX.Multiply(lhs._22 ?? 0 , rhs._21 ?? 0, m),
                    _22 = IntX.Multiply(lhs._21 ?? 0 , rhs._12 ?? 0, m) + IntX.Multiply(lhs._22 ?? 0 , rhs._22 ?? 0, m)
                };
            }
        }
        private static readonly mtx2x2 fibMtx = new mtx2x2 { _11 = 1, _12 = 1, _21 = 1 };
        private static readonly mtx2x2 identity = new mtx2x2 { _11 = 1, _22 = 1 };
        static mtx2x2 IntPower(mtx2x2 x, short power)
        {
            if (power == 0) return identity;
            if (power == 1) return x;
            IntX n = 15;
            while ((power <<= 1) >= 0) n--;
            mtx2x2 tmp = x;
            while (--n > 0)
                tmp = (tmp * tmp) * (((power <<= 1) < 0) ? x : identity);
            return tmp;
        }
        static IntX fibm(short n)
        {
            return IntPower(fibMtx, (short)(n - 1))._11;
        }
        static void Main()
        {
            IntX x= IntX.Parse("618507831590667692821237486561501624247987096016405159341685528690027641831713576510376480847184844186265198694299457590099717052512641561");
            Console.WriteLine(x+Environment.NewLine+Environment.NewLine);
             
            Console.WriteLine(fibm(661));
            Console.ReadKey();
   
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5