Проблема с координатами и дробными числами

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Проблема с координатами и дробными числами

Сообщение Kroid 30 авг 2011, 14:01

Никак не могу понять, в чем ошибка. Если я работаю с координатами, например, сравниваю их:
Синтаксис:
Используется csharp
float x, lastX;
x = go1.transform.position.x;
lastX = go2.transform.position.x;
if((lastX + 1) == x)

Тут lastX и x - позиции 2-х объектов. Когда я прибавляю или отнимаю целое число, всё работает правильно. Но если пишу число с точкой(2 знака после запятой):
Синтаксис:
Используется csharp
if((lastX + 0.86) == x)

то условие не срабатывает. Переменные объявил типа float. Даже числа пробовал писать с буквой "0.86f" - всё равно не помогает.


update 3:
Путаница с y и z прекратилась, но 0.86 всё равно не прибавляет.
Последний раз редактировалось Kroid 30 авг 2011, 14:49, всего редактировалось 4 раз(а).
Kroid
UNец
 
Сообщения: 8
Зарегистрирован: 22 авг 2011, 09:27

Re: Проблема с координатами и дробными числами

Сообщение Zaicheg 30 авг 2011, 14:23

Может бысть lastX + 0.86 просто не равно x? Вы точно исключили эту возможность и проверили значения в левой и правой частях через вывод в консоль в момент сравнения?
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Проблема с координатами и дробными числами

Сообщение Kroid 30 авг 2011, 15:13

Очередной вопрос. В редакторе поставил 2 объекта по координатам 1.72. Запрашиваю в скрипте координаты и получаю:
1.71999992370605
1.72000002861023
Почему?
Kroid
UNец
 
Сообщения: 8
Зарегистрирован: 22 авг 2011, 09:27

Re: Проблема с координатами и дробными числами

Сообщение Zaicheg 30 авг 2011, 15:16

Kroid писал(а):Очередной вопрос. В редакторе поставил 2 объекта по координатам 1.72. Запрашиваю в скрипте координаты и получаю:
1.71999992370605
1.72000002861023
Почему?

Потому что float.
В большинстве случаев == вернёт true, но можно на всякий случай использовать Mathf.Approximately.
http://unity3d.com/support/documentatio ... ately.html
Лично я использую if(Mathf.Abs(a - b) > treshold) для сравнения.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17