Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 6
    Гостей: 6
    Пользователи: - отсутствуют
    Роботы: - отсутствуют

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 8-12-2011, 00:35 Просмотров: 7553

    floatround Функция преобразует дробное число в целое

    Пару дней назад, на форуме увидел вопрос: "Как перевести дробное число в целое?".В итоге не найдя решения автор нашел другой метод получения необходимых данных, сразу же в целом значении. Но такое не всегда возможно. Тем более есть функция floatround, которая великолепно справляется с округлением дробных чисел.

    Инфо из float.inc:
    /* Round a float into a integer value */
    native floatround(Float:value, floatround_method:method=floatround_round);


    Синтаксис:
    floatround ( Float:value, floatround_method:method=floatround_round )

    • Float:value - Преобразуемое значение, переменная со значением или массив с указанным индексом.
    • floatround_method:method=floatround_round - Метод округления
      • floatround_round - вариант по умолчанию, какое целое число ближе к тому и округляет
      • floatround_floor - округляет в меньшую сторону
      • floatround_ceil - округляет в большую сторону
      • floatround_tozero - у меня получилось что все время к нулю.



    Тип функции:
    Native

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>
    #include <float>

    #define PLUGIN "[float.inc] floatround"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    public plugin_init() {
        
        register_plugin(PLUGIN, VERSION, AUTHOR)

        register_concmd("float-round","f_floatround")
        
    }
    public f_floatround(){
        
        new Float: num_float = 1.20
        server_print("^nFloat: %.2f",num_float)
        new num_integer
        
        num_integer = floatround(num_float,floatround_round)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_floor)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_ceil)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_tozero)
        server_print("Integer num: %d", num_integer)

        num_float = 1.50
        server_print("^nFloat: %.2f",num_float)
        

        num_integer = floatround(num_float,floatround_round)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_floor)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_ceil)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_tozero)
        server_print("Integer num: %d", num_integer)
        
        num_float = 1.70
        server_print("^nFloat: %.2f",num_float)

        num_integer = floatround(num_float,floatround_round)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_floor)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_ceil)
        server_print("Integer num: %d", num_integer)
        
        num_integer = floatround(num_float,floatround_tozero)
        server_print("Integer num: %d", num_integer)
    }


    Описание:
    Ну что тут описывать то, вот результат примера:
    float-round

    Float: 1.20
    Integer num: 1
    Integer num: 1
    Integer num: 2
    Integer num: 1

    Float: 1.50
    Integer num: 2
    Integer num: 1
    Integer num: 2
    Integer num: 1

    Float: 1.70
    Integer num: 2
    Integer num: 1
    Integer num: 2
    Integer num: 1

    В каждом из блоков выполняется функция округления с четырьмя возможными параметрами.
    Перед блоком показано дробное число, над которым проводится работа.

    Это, по моему мнению, наглядно показывает какой вариант как работает.
    По личному опыту могу сказать, что обычно применяются жесткое округление в большую или меньшую сторону. Так как если нужно целое число, это не спроста.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    floatround Функция преобразует дробное число в целое
    gavrilyuc

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    #define MAX_LEVEL 50
    #define COF_LEVEL 1.5
    new gLevels[MAX_LEVEL + 1];

    Set_Levels() {
    server_print("******** BEGIN ***************");
    new st_exp = 15;
    gLevels[0] = 0;
    gLevels[1] = st_exp;
    server_print("%d --> %d", 1, gLevels[1]);
    for(new i = 2; i < MAX_LEVEL; i++) {
    st_exp = (st_exp * COF_LEVEL);
    gLevels[i] = floatround(st_exp, floatround_ceil);
    server_print("%d --> %d", i, gLevels[i]);
    }
    server_print("******** END ***************");
    }

    Что я делаю не так ?
    у меня выводит :

    1 --> 15
    2 --> 23
    3 --> 1653473280
    4 --> 1982310912
    5 --> 1986164480
    6 --> 1986209664
    7 --> 1986210304
    8 --> 1986210304
    9 --> 1986210304
    10 --> 1986210304
    11 --> 1986210304
    12 --> 1986210304
    13 --> 1986210304
    14 --> 1986210304
    15 --> 1986210304
    16 --> 1986210304
    17 --> 1986210304
    18 --> 1986210304
    19 --> 1986210304
    20 --> 1986210304
    21 --> 1986210304
    22 --> 1986210304
    23 --> 1986210304
    24 --> 1986210304
    25 --> 1986210304
    26 --> 1986210304
    27 --> 1986210304
    28 --> 1986210304
    29 --> 1986210304
    30 --> 1986210304
    31 --> 1986210304
    32 --> 1986210304
    33 --> 1986210304
    34 --> 1986210304
    35 --> 1986210304
    36 --> 1986210304
    37 --> 1986210304
    38 --> 1986210304
    39 --> 1986210304
    40 --> 1986210304
    41 --> 1986210304
    42 --> 1986210304
    43 --> 1986210304
    44 --> 1986210304
    45 --> 1986210304
    46 --> 1986210304
    47 --> 1986210304
    48 --> 1986210304
    49 --> 1986210304
    То что чисто логически не должно.

    Radius

    7.05.2013
    ICQ: 357188115
    Публикаций: 1
    Комментариев: 57
    Репутация: -  4  +

    (st_exp * COF_LEVEL)


    Если хотя бы один операнд выражения Float, в Вашем случае это COF_LEVEL (1.5), то все выражение будет интерпретироваться как Float.

    Но переменная st_exp объявлена как целочисленная, отсюда и "неожиданный" результат.

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама