SA-MP Forums Archive
Дробная часть числа - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Дробная часть числа (/showthread.php?tid=335636)



Дробная часть числа - 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:
floatfract(f);
Если инклюдить влом, вот натив:

Code:
native Float:floatfract(Float:value);



Re: Дробная часть числа - iEnemY - 19.04.2012

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


Re: Дробная часть числа - max_colombo - 19.04.2012

Quote:
Originally Posted by jhonyxakep
View Post
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 со смещениями.

Вся проблема в определении количества знаков после запятой.