|
С# Средство разработки на платформе .Net |
27.11.2009, 11:35
|
#1
|
Нуждающийся
Регистрация: 24.11.2009
Сообщений: 68
Написано 16 полезных сообщений (для 40 пользователей)
|
Проблема в освении))
Допустим мне надо высчитать приращение х и у для расчета следующей точки в окружности, т.е. я пишу конструкцию типа
X = Math.Round(x0 + R * Math.Asin(a));
Y = Math.Round(y0 + R * Math.Acos(a));
Вылетает эррор:
Error 1 Cannot implicitly convert type 'double' to 'float'. An explicit conversion exists (are you missing a cast?)
Кто подскажет?
|
(Offline)
|
|
27.11.2009, 11:47
|
#2
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Проблема в освении))
X = (float)Math.Round(x0 + R * Math.Asin(a));
Y =(float) Math.Round(y0 + R * Math.Acos(a));
скорее всего так. попытайся приводить нужные числа к нужным типам. подскащки какие имеена числа не совпадают по типам студия обычно даёт
X = Math.Round(x0 + R * (float)Math.Asin(a));
Y = Math.Round(y0 + R * (float)Math.Acos(a));
или так ) нужно смотреть конкретно
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.11.2009, 11:50
|
#3
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблема в освении))
видимо X и Y типа float у тебя.
C# считает ошибкой даунгрейд типов, т.е. когда double (8байт) присваивается к переменной типа float(4байт), то точность данных падает. Есть два пути:
* сделать все участвующие переменные типа double
* сделать каст (насильное привидение типов)
X = (float)Math.Round(x0 + R * Math.Asin(a)); // при условии что x0, y0 и R типа double
Y = (float)Math.Round(y0 + R * Math.Acos(a));
А ещё можно даунгрейднуть значения косинуса:
X = Math.Round(x0 + R * (float)Math.Asin(a));
Y = Math.Round(y0 + R * (float)Math.Acos(a));
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.11.2009, 11:57
|
#4
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Проблема в освении))
честно, есдинственое чем мне не нравятся языки типа С++ и шарп так это ихняя маниакальная любовь к чёткому определения где какие типы, и чтобы все приведения типов были явно указаны юзером.
|
(Offline)
|
|
27.11.2009, 12:13
|
#5
|
|
Ответ: Проблема в освении))
DimasSup
вообще это разумно для языков которые позволяют юзеру делать свои типы, double это 8 байт, float это 4 байта, и double в float превращается никак не копированием 4 байт
|
|
|
Сообщение было полезно следующим пользователям:
|
|
27.11.2009, 13:03
|
#6
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Проблема в освении))
я то понимаю, просто меня раздражает когда прозевал гдето разнность типов, и начинается пляска вокруг одной строки
|
(Offline)
|
|
27.11.2009, 13:05
|
#7
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблема в освении))
Всё это оффтоп, C# четко типизированный язык, однако никто немешает определить автоматические методы конвертации, например как определён почти для всех типов данных метод ToString() который автоматически вызывается при попытках работы с данными как со строкой.
Иными словами как и С++, язык позволяет подстраивать его под себя.
Учитывая что C# задумывался как язык написания приложений с высокой отказоустойчивостью, то такие требования к коду вполне нормальны, так же существует мнение что правильно спроектированное приложение содержит минимум мест в коде требующих приведения типов в сторону даунгрейда.
Так же всвязи с поддержкой многопоточности по-умолчанию, в языке под запретов обыкновенные указатели, однако им на замену пришли умные указатели, ссылки и прочие защищенные сущности. Однако в секции unsafe{ } возможно использование любых небезопасных конструкций.
__________________
|
(Offline)
|
|
27.11.2009, 14:20
|
#8
|
Нуждающийся
Регистрация: 24.11.2009
Сообщений: 68
Написано 16 полезных сообщений (для 40 пользователей)
|
Ответ: Проблема в освении))
Сообщение от DimasSup
X = (float)Math.Round(x0 + R * Math.Asin(a));
Y =(float) Math.Round(y0 + R * Math.Acos(a));
|
И ведь работает)) Мужики вы боги)) я тут с бубном два часа над строчкой просидел)))) Уж думал дело без водки не обойдётся
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо shpak за это полезное сообщение:
|
|
27.11.2009, 14:25
|
#9
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Проблема в освении))
всегда рады помочь
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
проблема с С++ |
HAMANN |
C++ |
10 |
24.12.2009 09:31 |
Проблема |
Mark Castle |
Основной форум |
2 |
12.11.2009 18:19 |
Проблема |
rr333 |
3D Моделирование |
10 |
07.06.2009 17:08 |
Проблема с MP3 и EAX |
Maxim1441 |
2D-программирование |
3 |
29.07.2008 18:29 |
проблема с ode |
jimon |
3D-программирование |
0 |
24.09.2005 17:20 |
Часовой пояс GMT +4, время: 01:21.
|