Проблемы float или числа с плавающей точкой
|
|
robertono | Дата: Вторник, 15 Октября 2013, 20:38 | Сообщение # 1 |
Чокнутый Кот
Сейчас нет на сайте
| Всем известно, что числа float иногда выглядят немного непонятно.. Например когда вы покрутите какой то объект на сцене, и потом вернёте его в 0 0 0 то сможете увидеть число -9.536743E-07 или 9.536743E-07 или 2.861023E-06. Всё это тоже самое что и число 0 (ноль). Как можно сконвертировать что ли.. ..это число непонятное в нормальное всем понятное ? Есть формула как это считается? И что это за E-** ? Может это когда нибудь будет изучаться в школе на алгебре, но я лично не в курсе. Жду ответа. Заранее спасибо
|
|
| |
Reminer | Дата: Вторник, 15 Октября 2013, 20:45 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Цитата robertono ( ) И что это за E-** ? Е это 10 ** степень десятки.
Сообщение отредактировал Reminer - Вторник, 15 Октября 2013, 20:47 |
|
| |
robertono | Дата: Вторник, 15 Октября 2013, 21:09 | Сообщение # 3 |
Чокнутый Кот
Сейчас нет на сайте
| А реально это конвертировать в нормальное число?
|
|
| |
seaman | Дата: Вторник, 15 Октября 2013, 21:16 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| В шарпе Single.TryParse(строка).
|
|
| |
warzes | Дата: Среда, 16 Октября 2013, 07:14 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Цитата robertono ( ) А реально это конвертировать в нормальное число? Это вообще-то и есть нормальное число. Или ты хочешь сравнивать прям уж точно? Тогда влоат не для тебя
Цитата robertono ( ) Всё это тоже самое что и число 0 (ноль) 2 и 9 не может быть тем же что 0, что-то у тебя не так
Мой блог Вики DirectX
|
|
| |
robertono | Дата: Среда, 16 Октября 2013, 19:01 | Сообщение # 6 |
Чокнутый Кот
Сейчас нет на сайте
| Цитата warzes ( ) 2 и 9 не может быть тем же что 0, что-то у тебя не так но объект стоит так же , если его вернуть на 0 0 0 по rotation. Я просто делаю штуку, где пользователь может повернуть объект. И он видит углы поворота. Беру их из transform.rotation.eul..Edges . И если прибавить к X +10, а потом -10 (10.0f) то становиться не обратно ноль, а какое то число которое я писал в первом посте. Так что это всё ноль. Находил я такое на answers.unity3d.com. Там чувак сказал что это число (вроде это -9.536743E-07) приравнивается к нулю.
|
|
| |
NEBR | Дата: Среда, 16 Октября 2013, 19:27 | Сообщение # 7 |
почти ветеран
Сейчас нет на сайте
| robertono, углы Эйлера должны быть строго в диапазоне от 0 до 360 градусов, прибавляя или убавляя 10, заостри внимание на этом, не выходит ли значение за эти пределы. Может проблема в этом.
King Size #Gamiron12
|
|
| |
robertono | Дата: Среда, 16 Октября 2013, 21:01 | Сообщение # 8 |
Чокнутый Кот
Сейчас нет на сайте
| NEBR, не выходит. Но это просто число, просто длинное.. Я проверю
|
|
| |
GECK | Дата: Среда, 16 Октября 2013, 21:17 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Цитата robertono ( ) Например когда вы покрутите какой то объект на сцене, и потом вернёте его в 0 0 0 то сможете увидеть число -9.536743E-07 или 9.536743E-07 или 2.861023E-06 Это из-за особенностей хранения вещественных чисел в памяти. При вычитании близких по величине чисел результат получается с погрешностью.
Число -9.536743E-07 в обычной записи выглядит так: -0.0000009536743 (очень близко, но все-таки не ноль). Если хочешь получить красивое число - попробуй что-то вроде Mathf.Round(число * 1000) / 1000.0
Всё гениальное просто. И хреново работает.
|
|
| |
robertono | Дата: Среда, 16 Октября 2013, 21:21 | Сообщение # 10 |
Чокнутый Кот
Сейчас нет на сайте
| Цитата GECK ( ) Число -9.536743E-07 в обычной записи выглядит так: -0.0000009536743 А как вы это определили?
Цитата GECK ( ) Если хочешь получить красивое число - попробуй что-то вроде Mathf.Round(число * 1000) / 1000.0 Хорошо, спасибо, попробую!
|
|
| |
GECK | Дата: Среда, 16 Октября 2013, 21:26 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| Цитата Reminer ( ) Е это 10 ** степень десятки. -9.536743E-07 = -9.536743 * 10^(-7) = -9.536743 * 0.0000001 = -0.0000009536743
Всё гениальное просто. И хреново работает.
|
|
| |