Инфо из 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 - у меня получилось что все время к нулю.
- floatround_round - вариант по умолчанию, какое целое число ближе к тому и округляет
Тип функции:
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
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
В каждом из блоков выполняется функция округления с четырьмя возможными параметрами.
Перед блоком показано дробное число, над которым проводится работа.
Это, по моему мнению, наглядно показывает какой вариант как работает.
По личному опыту могу сказать, что обычно применяются жесткое округление в большую или меньшую сторону. Так как если нужно целое число, это не спроста.
#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
То что чисто логически не должно.