Дробная часть числа -
max_colombo - 19.04.2012
Как взять дробную часть числа?
new Float:fFract = floatfract(3249.34); мне нужен Int
Есть допустим число 352.892,мне нужно взять 892
new number = 892; а не 0.892
Re: Дробная часть числа -
iEnemY - 19.04.2012
Ну, например так: записываешь флоат в строку, циклом ищешь в строке точку, отрезаешь все до точки (или с точкой), конвертируешь в интегер, выводишь полученный интегер.
А если лень самому думать, вот примерный пример О_о
pawn Code:
stock TakePartOfFloat(Float:f)
{
new _s[64];
format(_s, 64, "%f", f);
new final[32];
new from;
for(new i = 0; i <= strlen(_s); i++)
{
if(_s[i] == '.') { from = i+1; break; }
}
strmid(final, _s, from, strlen(_s), 64);
new retval = strval(final);
return retval;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/something",true) == 0)
{
printf("retval = %d", TakePartOfFloat(1234.5678));
return 1; // в моём случае вывело "retval = 567749"
}
}
Re: Дробная часть числа -
jhonyxakep - 19.04.2012
iEnemY, да вы батенька, извращенец
float.inc:
Если инклюдить влом, вот натив:
Code:
native Float:floatfract(Float:value);
Re: Дробная часть числа -
iEnemY - 19.04.2012
Необходимости использования данной функции не возникало, по сему знать о ней не знал. Просто взял и написал)
Re: Дробная часть числа -
max_colombo - 19.04.2012
Quote:
Originally Posted by jhonyxakep
floatfract(f);
|
разве он не возвращает дробную часть?
пример 4.678 он мне выдаст 0.678,а надо 678
Re: Дробная часть числа -
jhonyxakep - 19.04.2012
учите математику:
Циклом умножаем число на 10, и проверяем что возвращает floatfract(f);. Когда вернет 0, значит вы получили дробную часть в целом виде
Re: Дробная часть числа -
iEnemY - 19.04.2012
А в моём искусно извращённом примере из "123.456" всегда вернёт "456" ^^
Добавить %.4f, и будет с большей точностью возвращать.
Re: Дробная часть числа -
jhonyxakep - 19.04.2012
Quote:
А в моём примере из "123.456" всегда вернёт "456" ^^
|
Да я и не спорю, но все-же разница между двумя способами... Хотя от безысходности можно и строку парсить
Re: Дробная часть числа -
iEnemY - 19.04.2012
Ну почему же от безысходности, хоть и небольшая нагрузка на мосх, во время написания своего способа (пускай хоть и изобретение колеса) всегда полезна.
Re: Дробная часть числа -
Geryy - 20.04.2012
можно в левой части дроби делать 0.
Float:fract = number - floatround(number, floatround_tozero);
после этого число всегда будет иметь вид: 0.<дробная часть>
затем первые 2 символа отрезать и все.
Re: Дробная часть числа -
Stepashka - 20.04.2012
получаем дробную часть, умножаем на 1000, используем
floatval, наслаждаемся.
Re: Дробная часть числа -
OKStyle - 20.04.2012
А так не сработает?
pawn Код:
new Float:fFract = floatfract(3249.34) << 2;
Re: Дробная часть числа -
jhonyxakep - 20.04.2012
Quote:
new Float:fFract = floatfract(3249.34) << 2;
|
И тут пришел OKStyle со смещениями.
Вся проблема в определении количества знаков после запятой.