Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Глюки вывода Float в чат

Статус пользователя coolman
сообщение 30.9.2014, 13:33
Сообщение #1


Стаж: 19 лет
Город: Екатеринбург

Сообщений: 1220
Благодарностей: 218
Полезность: 149

задаю к примеру:
new Float:work =8.3
ColorChat(0, RED, "число work ровно: %.1f", work)

в чат пишет 8.3 меняю work на 8.4 в чат пишет 8.3, меняю на 8.5 в чат выводит 8.5, почему на 8.4 такое происходит?

Отредактировал: coolman, - 30.9.2014, 13:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fred Perry
сообщение 30.9.2014, 15:27
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Попробуй 8.401 :)


You become responsible, forever, for what you have tamed
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 30.9.2014, 15:30
Сообщение #3


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

coolman,
https://ru.wikipedia.org/wiki/Printf
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
kritik
сообщение 30.9.2014, 15:36
Сообщение #4
Стаж: 12 лет

Сообщений: 511
Благодарностей: 708
Полезность: 0

Float не точное число. Тут скорее надо 8.401.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя coolman
сообщение 30.9.2014, 18:06
Сообщение #5


Стаж: 19 лет
Город: Екатеринбург

Сообщений: 1220
Благодарностей: 218
Полезность: 149

Цитата(Fred Perry @ 30.9.2014, 18:27) *
Попробуй 8.40 :)

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

Цитата(Fintok @ 30.9.2014, 18:30) *

не осилил, более конкретный пример бы.

Отредактировал: coolman, - 30.9.2014, 18:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 30.9.2014, 18:35
Сообщение #6
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(coolman @ 30.9.2014, 18:06) *
не осилил, более конкретный пример бы.


При work=8.4 в чат выводит 8.399999999999, а поскольку ты выводишь только 1 символ после запятой, то обрезается до 8.3
Вариант первый:
Код:
ColorChat(0, RED, "число work ровно: %.2f", work)//будет выводить 8.39

Вариант второй:
Код:
ColorChat(0, RED, "число work ровно: %.1f", work + 0.0001)//будет выводить 8.4
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 30.9.2014, 18:39
Сообщение #7


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

voed,
а почему когда 8,3 пишет 8,3, а не 8,2999999999


You become responsible, forever, for what you have tamed
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 30.9.2014, 18:46
Сообщение #8
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(Fred Perry @ 30.9.2014, 18:39) *
voed,
а почему когда 8,3 пишет 8,3, а не 8,2999999999

А там округляется до 8.30 ровно) Почему именно так - я не знаю
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
kritik
сообщение 30.9.2014, 18:50
Сообщение #9
Стаж: 12 лет

Сообщений: 511
Благодарностей: 708
Полезность: 0

У float всегда есть погрешность. Если очень интересно:
http://msdn.microsoft.com/ru-ru/library/hd7199ke.aspx
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя STR@TEG
сообщение 30.9.2014, 18:59
Сообщение #10
Стаж: 16 лет

Сообщений: 4186
Благодарностей: 1763
Полезность: 837

coolman,
Округление в большую сторону попробуй использовать. floatround вроде метод.

А нет, не то. Совсем не то.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 30.9.2014, 19:00
Сообщение #11


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

coolman, плохо кончено.
%.2f - это спецификатор точности, он указывает на минимальное количество символов, которое должно появиться после десятичной запятой (точки) при обработке. Ну, а все остальное объяснил уже voed.

Отредактировал: Fintok, - 30.9.2014, 19:03
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
voed
сообщение 1.10.2014, 0:09
Сообщение #12
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(kritik @ 30.9.2014, 18:50) *
У float всегда есть погрешность. Если очень интересно:
http://msdn.microsoft.com/ru-ru/library/hd7199ke.aspx

Погрешность-то есть, вот только в VS2013 printf округляет число правильно. А функция atcprintf, которая используется в AMXX, этого не умеет. Поэтому единственный адекватный вариант добавлять к числу 0.0001 при выводе.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя coolman
сообщение 1.10.2014, 10:43
Сообщение #13


Стаж: 19 лет
Город: Екатеринбург

Сообщений: 1220
Благодарностей: 218
Полезность: 149

Цитата(voed @ 1.10.2014, 3:09) *
Погрешность-то есть, вот только в VS2013 printf округляет число правильно. А функция atcprintf, которая используется в AMXX, этого не умеет. Поэтому единственный адекватный вариант добавлять к числу 0.0001 при выводе.

я понял твою мысль(чуть позже попробую), только осталось понять, по всем цифрам прибавлять или выискивать артефакты в преобразовании у отдельных дробных ? )))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя coolman
сообщение 1.10.2014, 10:51
Сообщение #14


Стаж: 19 лет
Город: Екатеринбург

Сообщений: 1220
Благодарностей: 218
Полезность: 149

хотя наверное ко всем хуже не будет ))))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 1.10.2014, 10:54
Сообщение #15
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(coolman @ 1.10.2014, 10:43) *
я понял твою мысль(чуть позже попробую), только осталось понять, по всем цифрам прибавлять или выискивать артефакты в преобразовании у отдельных дробных ? )))

По идее, можно добавлять ко всем, если тебе нужны только десятые. Но кто знает, что он еще не так округлит, поэтому лучше проверь)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: