Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2016, 21:47   #1
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию Преобразовать метод класса в double

Есть класс

Код:
class doubleval
        {
            public double vl1;
            public double vl2;
 
            public doubleval(double value1,double value2)
            {
                vl1 = value1; 
                vl2 = value2; 
            }        
        }
Есть метод.

Код:
static doubleval GetSpectralDensity(double U, double frequency, double T)   
    {
///
            return new doubleval(part1,part2);
        }
Суть проблемы
Метод у меня относится к doubleVal,но компилятор сообщает что неявное преобразование из doubleval в double невозможно.
так как в этой процедуре должны быть оба double(процедура list Zegraph)

Код:
list.Add(x, solve);
Я подумал что лучше создать отдельную переменную и присвоить процедуру в неё- так появилась переменная solve
Других мыслей у меня не было.
Но при запуске программы выскочило исключение,где в Дополнительных сведениях говорилось что

Необработанное исключение типа "System.InvalidCastException" в mscorlib.dll
Дополнительные сведения: Не удалось привести тип объекта "doubleval" к типу "System.IConvertible"

Код:
public void drawgraph(int frc, int frc1, double U, double T, double frequency)
        {
            GraphPane pane = zedGraphControl1.GraphPane;
            pane.CurveList.Clear();
            PointPairList list = new PointPairList();
 
            double xmin = frc;
            double xmax = frc1;
 
            double solve = Convert.ToDouble(GetSpectralDensity(U, frequency, T));----Вот переменная для преобразования,исключение тоже указывает на эту строку.
 
            for (double x = xmin; x <= xmax; x += 0.01)
            {
                list.Add(x, solve);
            }
            LineItem myCurve = pane.AddCurve("Спектральная плотность амплитуд", list, Color.Blue, SymbolType.None);
            zedGraphControl1.AxisChange();
            zedGraphControl1.Invalidate();
        }
Может есть другой способ?
schoolboy99 вне форума Ответить с цитированием
Старый 21.04.2016, 22:00   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что именно вам надо получить? По какому принципу вам надо преобразовывать 2 double в 1?

Цитата:
Метод у меня относится к doubleVal,но компилятор сообщает что неявное преобразование из doubleval в double невозможно.
Это сюрприз? Думали, что если назвать свой класс DoubleVal, то компилятор не заметит и посчитает его обычным doubl'ом?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.04.2016, 22:12   #3
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что именно вам надо получить? По какому принципу вам надо преобразовывать 2 double в 1?


Это сюрприз? Думали, что если назвать свой класс DoubleVal, то компилятор не заметит и посчитает его обычным doubl'ом?
В методе GetSpectralDensity я возвращаю 2 значения,они у меня будут как действительная и мнимая часть.

результаты я хочу вывести в график функции.

Но ZedGraph работает только с double,вот и пришлось придумывать непонятное
schoolboy99 вне форума Ответить с цитированием
Старый 21.04.2016, 22:17   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так вам для начала надо определиться что именно вы хотите на графике получить.
На бумаге или в пеинте порисуйте его например

Для комплексных чисел кстати есть https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx начиная с .NET 4.0.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.04.2016, 22:21   #5
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Изначальная версия была с комплексными числами
Было и using System.Numerics;

Было public static Complex и return new Complex(real,imaginary)

но всё ударилось в ZedGraph так как explicit–преобразование работает только с полями а не с методами.

Метод увы не преобразовать из Complex в double.
schoolboy99 вне форума Ответить с цитированием
Старый 21.04.2016, 22:27   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Причем тут преобразование и ZedGraph, нельзя просто взять и запихнуть 2 числа в одно, потому что есть много вариантов как это сделать (вне зависимости от языка и библиотек) и вам надо рассказать компилятору что вы от него хотите.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.04.2016, 10:33   #7
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Ниже приведены причины,почему я отказывался на время от комплексного и от System.Numerics

Можно в Си Шарп из комплексного преобразовать в double?

Я оставил комплексную величину он у меня находит число(2 числа у меня в одном,всё выводит но не в график а пока что в ЛистБокс)

Но для дальнейшего вычисления с уже полученным значением нужно преобразовать из Complex в double.
Такое возможно?

Примеров с explicit пока 1-2 примера и то,в кратце или может я плохо ищу.

Вот что у меня есть

Код:
static Complex GetSpectralDensity(double U, double frequency, double T)
        {
            NumericalIntegration integration = new NumericalIntegration();
            double real = U * integration.Calculate(x => Math.Cos(-frequency * x), 0, T);
            double imaginary = U * integration.Calculate(x => Math.Sin(-frequency * x), 0, T);
            return new Complex(real, imaginary);
        }

        static Complex GetNewVal(double U, double frequency, double T)
        {
            NumericalIntegration integration = new NumericalIntegration();
            double part1 = U / GetSpectralDensity(U, frequency, T) * integration.Calculate(x => Math.Cos(-frequency * x), 0, T);
            double part2 = U / GetSpectralDensity(U, frequency, T) * integration.Calculate(x => Math.Sin(-frequency * x), 0, T);
            return new Complex(part1,part2);
        }
то есть в методе GetNewVal я для получения переменных part1 и part2,должен вызвать самый первый метод.

Код:
double part1 = U / GetSpectralDensity(U, frequency, T) * integration.Calculate(x => Math.Cos(-frequency * x), 0, T);
 double part2 = U / GetSpectralDensity(U, frequency, T) * integration.Calculate(x => Math.Sin(-frequency * x), 0, T);
Вот тут и начал ругатся что неявное преобразование из Complex в double невозможно
И поэтому вопрос?как возможно,ведь не double всё переводить.

Это не я придумал это всё по учебнику и по формулам,которые там даны.

Последний раз редактировалось schoolboy99; 22.04.2016 в 10:39.
schoolboy99 вне форума Ответить с цитированием
Старый 22.04.2016, 10:50   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы так и не поняли, что язык и библиотеки тут не причем?

"Преобразовать" комплексное число в одно обычные число можно разными способами: например можно взять только Real или только Imaginary часть, можно вычислить Magnitude или Phase, ...
Компилятор не телепат и не знает что из этого вам нужно для вашей задачи.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.04.2016, 10:51   #9
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Спасибо!
Наконец-то я получил ответ на свой вопрос!
schoolboy99 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
преобразовать метод гаусса с выбором главного элемента Рагнара Microsoft Office Excel 1 10.05.2013 04:10
Как создать метод класса, возвращающий объекты (поля класса) разных типов frosich Общие вопросы Delphi 3 01.03.2013 19:29
функция pow(double x, double y) Не могу понять в чем ошибка Vlashel Помощь студентам 3 07.10.2010 16:28
преобразовать double в TString (c++ Builder) Yokka C++ Builder 2 14.05.2010 20:59