Числа с плавающей запятой... -
-Stranger- - 03.09.2010
Всем привет. Очередной тупой вопрос от меня
Вообщем я вообще запутался с числами с плавающей запятой.
Суть такова, решил я сделать налоги на сервере, и что-бы мэр мог менять их. Причём нада что-бы было можно ставить например 0.7% или даже 0.55%, т.е. с точкой.
Функции для чтение\записи в ini файл сделал, всё читает, всё пишет.
А вот и использованием в коде есть траблы.
Первый такой:
Создаю переменную:
new Float:PERCENTAGEAUTOBUY;
дальше загружаю её значение. Всё загружается.
Дальше использую её:
new Price1[max_line];
Price1[pid] = Price[vid]-((Price[vid]/100)*PERCENTAGEAUTOBUY);
И при компиляции на этой строке варнинг: "
warning 213: tag mismatch"
Второй:
Code:
...........тут начало кода.........
else if(iscmd(tmp,"bank")){
tmp = strtok(cmdtext,idx);
if(!strlen(tmp)){
format(msg,max_line,"Проценты от вклада: %.3f процентов",PERCENTAGEBANK);
Message(playerid,msg,clYellow);
return 1;
}
pint = strval(tmp);
if(pint<=0 || pint>=10){
Message(playerid,"Некорректное количество",clYellow);
return 1;
}
PERCENTAGEBANK = pint;
format(msg,max_line,"Мэр изменил проценты от вклада. Теперь они равны: %.3f процентов",PERCENTAGEBANK);
SendClientMessageToAll(clYellow, msg);
}
...........тут конец кода.........
В результате когда я пытаюсь ввести число например "0.5" пишет "Некорректное количество", а например если "1.5" то сохраняет как просто "1"
ps. Мод Mafia Wars.
Re: Числа с плавающей запятой... -
Aleks10 - 03.09.2010
new Float: pint = floatstr(tmp);
if(pint<=0.0f || pint>=10.0f){
new Float:Price1[max_line];
Price1[pid] = Price[vid]-((Price[vid]/100.0f)*PERCENTAGEAUTOBUY);
если хочешь результат ввиде дроби - ВЕЗДЕ используй float
если не хочешь - ВЕЗДЕ где float, используй floatround();
это должно исполнятся ОБЯЗАТЕЛЬНО(по правилу приведения типов вроде.. как то так

)
Re: Числа с плавающей запятой... -
-Stranger- - 03.09.2010
Code:
(2668) : error 001: expected token: ")", but found "-identifier-"
(2668) : error 029: invalid expression, assumed zero
Соответственно код такой:
[CODE=Строка 2668]Price1[pid] = Price[vid]-((Price[vid]/100.0f)*PERCENTAGEAUTOBUY);[/CODE]
Причём, нужно что-бы "Price1" НЕ была десятичной. Из всего примера десятичное число это "PERCENTAGEAUTOBUY"
Re: Числа с плавающей запятой... -
Stepashka - 03.09.2010
Может дробным, десятичной бывает только система счисления?
Re: Числа с плавающей запятой... -
-Stranger- - 03.09.2010
Ну да, не придирайтесь к словам

)
Re: Числа с плавающей запятой... -
-Stranger- - 03.09.2010
т.е. как я понял нада делать так:
Code:
new Float:Price1;
Price1 = Price[vid]-((Price[vid]/100.0)*PERCENTAGEAUTOBUY);
и дальше использовать её как "floatround(Price1)"
Я правильно сделал?
Re: Числа с плавающей запятой... -
-Stranger- - 03.09.2010
Так, всё разобрался, тока теперь проблема с самим числом, т.е. пишу например 0.05 а в результате получается 0.049999. В чём касяк?
Re: Числа с плавающей запятой... -
Maccer - 03.09.2010
Quote:
Originally Posted by -Stranger-
Так, всё разобрался, тока теперь проблема с самим числом, т.е. пишу например 0.05 а в результате получается 0.049999. В чём касяк?
|
формат такой
http://ru.wikipedia.org/wiki/IEEE_754
чтобы обрезать цифры при форматировании вместо %f используй %.2f (где вместо 2 нужное число цифр после запятой)
Re: Числа с плавающей запятой... -
Aleks10 - 04.09.2010
floatround... там есть несколько типов округлений