none
помогите, пожалуйста RRS feed

  • Вопрос

  • foreach (double y in list)
                    {
                        double z, d;
    
                        z = y;
                        d = y;
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        if (d == y)
    
                             textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox
                               else
                            textBox2.Text += d.ToString() + System.Environment.NewLine;
    
                    }
    Как сделать, так чтобы цифры в экспоненциальном виде оканчивающиеся на ноль, писалились в десятичном целом виде, то-есть так: 5 вместо, 5.0000000000E+0000? А числа, не оканчивающиеся на ноль, должны писаться в экспоненциальном виде!

    9 октября 2013 г. 11:54

Ответы

  • foreach (double y in list)
                    {
                        double z;
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        z = Convert.ToInt32(y);
                        if (z <= 10)
                        {
                            textBox2.Text += y.ToString() + System.Environment.NewLine;
                        }
                        else
                        {
                            textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox
                        }
                    }

    Вот, последнее решение! И оно правильное! В этом условии if (z <= 10), все числа, сравниваются с 10 , они либо меньше, либо равны 10, и так - как, там стоит оператор else, который числа разбивает на два потока, в y идут числа от 0 до 10, а числа не соответствующие условию if (z <= 10), записываются в z и преобразуются в экспоненту. Числа бирутся из файла txt, извините что не сказал и загружаются массивом.

    • Помечено в качестве ответа georgushek 14 октября 2013 г. 4:08
    14 октября 2013 г. 4:08

Все ответы

  • foreach (double d in list)
    {
    double x,y = d;
    x = Convert.ToInt(x);
    if ((double)x==y)
    {
    Console.WriteLine(x);
    }
    else
    {
    Console.WriteLine(y);
    }
    }

    9 октября 2013 г. 19:09
  • вы хотите сказать,  что мне нужно поставить скобки?
    10 октября 2013 г. 4:01
  • Если перевести число 5.00000 в Int оно превратится в 5
    а сравнивать нужно только одиноковые типы.
    то есть (double)5==5.000000
    а Если число 5.00000 изменить на 5.000001 то сравнение
    будет возващать false;
    Как раз это то что нужно

    using System;
    class Program
    {
    
    static void Main(string[] args)
    {
    double s = 5.000000000000001;
    double x,y;
    y = s;
    x = Convert.ToInt32(s);
    if ((double)x == y)
    {
    System.Windows.Forms.MessageBox.Show(x);
    }
    else
    {
    System.Windows.Forms.MessageBox.Show(y);
    }
    }
    }

    10 октября 2013 г. 8:21
  • у меня наоборот не получается, сейчас в формате экспоненты! Всё  в целом формате!

    10 октября 2013 г. 10:08
  • Как то так:

    double s = 5.000000000000001;
    double x, y;
    y = s;
    x = Convert.ToInt32(s);
    if ((double)x == y)
    {
        textBox2.Text += x.ToString();
    }
    else
    {
        textBox2.Text += y.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture);
    }

    • Помечено в качестве ответа georgushek 14 октября 2013 г. 4:08
    • Снята пометка об ответе georgushek 14 октября 2013 г. 4:11
    10 октября 2013 г. 10:29
    Отвечающий
  • double s не скоротит 5.000000000001 до 5. Слишком много нулей.

    тут например это разные числа

    public static void Main()
       {
          double value1 = .333333333333333;
          double value2 = 1.0/3;
          Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2, value1.Equals(value2));
       }
    //  0.333333333333333 = 0.33333333333333331: False

    Как видно из примера тип Double может вести себя очень не предсказуемо, а в вашей задаче есть неопределенность

    число 5 как вы говорите не может быть числом 5.00000е+000 просто потому что е+??? не может заканчиватся нулями, и после плавающей запятой у вас тоже не могут быть много нулей, точнее вообще не может быть все нулей, иначе Double сам его преобразует в 5е+???

    В итоге нужно взять некую десятичную дробь с несколькими значениями после нуля,

     public static void Main()
       {
          double value1 = .333333333333333;
          double value2 = 1.0/3;
          int precision = 7;
          value1 = Math.Round(value1, precision);
          value2 = Math.Round(value2, precision);
          Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2, value1.Equals(value2));
       }
    
     0.3333333 = 0.3333333: True

    на то и будет основываться сравнение на наличие нулей

    если не прав, извините




    10 октября 2013 г. 15:36
  • foreach (double y in list)
                    {
                        double z;
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        z = Convert.ToInt32(y);
                        if (z <= 10)
                        {
                            textBox2.Text += y.ToString() + System.Environment.NewLine;
                        }
                        else
                        {
                            textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox
                        }
                    }

    Вот, последнее решение! И оно правильное! В этом условии if (z <= 10), все числа, сравниваются с 10 , они либо меньше, либо равны 10, и так - как, там стоит оператор else, который числа разбивает на два потока, в y идут числа от 0 до 10, а числа не соответствующие условию if (z <= 10), записываются в z и преобразуются в экспоненту. Числа бирутся из файла txt, извините что не сказал и загружаются массивом.

    • Помечено в качестве ответа georgushek 14 октября 2013 г. 4:08
    14 октября 2013 г. 4:08