Проблема со сравниванием переменных

Программирование на Юнити.

Проблема со сравниванием переменных

Сообщение LordWerewolf 20 июн 2018, 10:57

Добрый день, господа!
Не могу разобраться, может кто сталкивался с подобным и знает как решить проблему?
Нужно сравнить две переменные типа float.
Сравниваю так:
Синтаксис:
Используется csharp
Mathf.Approximately(angleSector, -90f)

Но такой метод работает только при положительном значении переменных.
Когда сравниваю отрицательные, ничего не выходит.
Где я туплю?
LordWerewolf
UNIт
 
Сообщения: 81
Зарегистрирован: 04 апр 2016, 13:20

Re: Проблема со сравниванием переменных

Сообщение archibalt 20 июн 2018, 11:27

А просто if(a==b){} не подходит? Нужно именно приблизительно?
Аватара пользователя
archibalt
UNец
 
Сообщения: 20
Зарегистрирован: 18 июн 2018, 21:50

Re: Проблема со сравниванием переменных

Сообщение 1max1 20 июн 2018, 12:05

Когда сравниваю отрицательные, ничего не выходит.

Mathf.Approximately(Mathf.Abs(angleSector), Mathf.Abs(-90f));
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема со сравниванием переменных

Сообщение LordWerewolf 20 июн 2018, 12:22

archibalt писал(а):А просто if(a==b){} не подходит? Нужно именно приблизительно?

нет, там может быть небольшая погрешность

1max1 писал(а):
Когда сравниваю отрицательные, ничего не выходит.

Mathf.Approximately(Mathf.Abs(angleSector), Mathf.Abs(-90f));


не уверен, что Abs подойдет... что будет, если у меня две проверки, одна -90f а другая 90f ?
Разве Mathf.Abs не будет оба значения видеть как 90f ?
LordWerewolf
UNIт
 
Сообщения: 81
Зарегистрирован: 04 апр 2016, 13:20

Re: Проблема со сравниванием переменных

Сообщение ilkalawson 20 июн 2018, 12:30

Синтаксис:
Используется csharp
float value = angleSector - (-90f);

if (value <= 0.01f) {

}


?
ilkalawson
UNIверсал
 
Сообщения: 412
Зарегистрирован: 19 янв 2015, 20:38
Skype: lawsonunity

Re: Проблема со сравниванием переменных

Сообщение 1max1 20 июн 2018, 13:03

float a = angleSector;
float b = -90f;

float dist = Mathf.Abs(a - b);

if (dist <= 0.00001f) ...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема со сравниванием переменных

Сообщение LordWerewolf 20 июн 2018, 13:12

ilkalawson писал(а):
Синтаксис:
Используется csharp
float value = angleSector - (-90f);

if (value <= 0.01f) {

}


?


Мне надо сравнить 21 значение... предлагаете для каждого значения строить такую конструкцию?
Мне кажется это слишком... а если у меня этих значений 100 или больше будет?

Но спасибо за вариант!
LordWerewolf
UNIт
 
Сообщения: 81
Зарегистрирован: 04 апр 2016, 13:20

Re: Проблема со сравниванием переменных

Сообщение alt3d 20 июн 2018, 13:27

Первый раз слышу чтобы Mathf.Approximately работал только с положительными числами.
Написал тест - все работает, возвращает true.
Или я чего-то не понял?

Синтаксис:
Используется csharp
var a = -10f;
var b = 10 * -1f;
Debug.Log(Mathf.Approximately(a, b));
 
alt3d
Старожил
 
Сообщения: 687
Зарегистрирован: 04 сен 2011, 21:19
  • Сайт
  • ICQ

Re: Проблема со сравниванием переменных

Сообщение 1max1 20 июн 2018, 13:29

предлагаете для каждого значения строить такую конструкцию?

А отдельный метод написать религия не позволяет видимо?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема со сравниванием переменных

Сообщение LordWerewolf 20 июн 2018, 13:36

1max1 писал(а):
предлагаете для каждого значения строить такую конструкцию?

А отдельный метод написать религия не позволяет видимо?


да, ступил... сорри ;)

Вопрос закрыт, Всем спасибо за участие!
LordWerewolf
UNIт
 
Сообщения: 81
Зарегистрирован: 04 апр 2016, 13:20

Re: Проблема со сравниванием переменных

Сообщение Dewa1s 20 июн 2018, 13:38

Синтаксис:
Используется csharp
public static class Extension
    {
        public static bool AlmostEquals(this float float1, float float2, float precision = 2)
        {
            float epsilon = Mathf.Pow(10.0f, -precision);
            return (Math.Abs(float1 - float2) <= epsilon);
        }
    }

Соответственно, работать будет так

Синтаксис:
Используется csharp
if ( 90.0f.AlmostEquals(90.0f))
{

}
//Либо с ручным указание количества точек после запятой
if ( 90.0f.AlmostEquals(90.0f,2))
{

}
Аватара пользователя
Dewa1s
Старожил
 
Сообщения: 564
Зарегистрирован: 26 дек 2011, 02:12

Re: Проблема со сравниванием переменных

Сообщение Anonymyx 20 июн 2018, 14:35

Велосипедники, Approximately прекрасно все сравнивает, если знаки верно поставить, там такая же реализация через Abs(a-b) < epsilon, и значение эпсилона тоже есть в классе Mathf.

Синтаксис:
Используется csharp
public static bool Approximately(float a, float b)
    {
      return (double) Mathf.Abs(b - a) < (double) Mathf.Max(1E-06f * Mathf.Max(Mathf.Abs(a), Mathf.Abs(b)), Mathf.Epsilon * 8f);
}
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55


Вернуться в Скрипты

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

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