Всем привет, давно нечего такого не писал
Уже можно открывать целый раздел, посвящённый всяким странностям языка Pawn ну или по крайне мере той его урезке которая используется для SAMP
Так вот, кто тут у нас самый умный, объясните пожалуйста почему FloatFromIDfloat(1) - возвращает 0.014999.
А вот FloatFromIDfloat(2) - Все честные 0.135.
Code
Float:FloatFromIDfloat(id)
{
if(id == 0) { return 0.0; }
else if(id == 1) { return 0.015; }
else if(id == 2) { return 0.135; }
else if(id == 3) { return 2.500; }
else if(id == 4) { return 4.000; }
else if(id == 5) { return 3.000; }
return 0.0;
}
Пример:
Code
if(strcmp(cmd, "/getfloatid", true) == 0)
{
new ofloatid = strval(strtok(cmdtext,idx));
new string[128];
format(string, sizeof(string),"*Float ID:%d, Float: %f.",ofloatid, FloatFromIDfloat(ofloatid));
SendClientMessage(playerid, 0xAAAAAAAA, string);
return 1;
}
Добавлено (06.11.2010, 13:14)
---------------------------------------------
Не сломали головы?
Совсем чуть глубже капнуть, то можно понять что FloatFromIDfloat(1) - выдаёт правильно 0.015. А вот %f формат делает странные искажения с небольшими числами Float
*ENTERED Float: 0.009999. - Real String: 0.01
*ENTERED Float: 0.019999. - Real String: 0.02
*ENTERED Float: 0.029999. - Real String: 0.03
*ENTERED Float: 0.039999. - Real String: 0.04
*ENTERED Float: 0.050000. - Real String: 0.05
*ENTERED Float: 0.010999. - Real String: 0.011
*ENTERED Float: 0.012000. - Real String: 0.012
*ENTERED Float: 0.013000. - Real String: 0.013
*ENTERED Float: 0.012000. - Real String: 0.012
*ENTERED Float: 0.013000. - Real String: 0.013
*ENTERED Float: 0.014000. - Real String: 0.014
*ENTERED Float: 0.014999. - Real String: 0.015
*ENTERED Float: 0.016000. - Real String: 0.016
*ENTERED Float: 0.017000. - Real String: 0.017
*ENTERED Float: 0.017999. - Real String: 0.018
*ENTERED Float: 0.018999. - Real String: 0.019
*ENTERED Float: 0.019999. - Real String: 0.020
*ENTERED Float: 0.020999. - Real String: 0.021
*ENTERED Float: 0.021999. - Real String: 0.022
*ENTERED Float: 0.023000. - Real String: 0.023
*ENTERED Float: 0.024000. - Real String: 0.024
Code
if(strcmp(cmd, "/showfloat", true) == 0)
{
cmd = strtok(cmdtext,idx);
new Float:ofloatid = floatstr(cmd);
new string[128];
format(string, sizeof(string),"*ENTERED Float: %f. - Real String: %s",ofloatid, cmd);
SendClientMessage(playerid, 0xAAAAAAAA, string);
return 1;
}