Числа с плавающей запятой...
#1

Всем привет. Очередной тупой вопрос от меня

Вообщем я вообще запутался с числами с плавающей запятой.
Суть такова, решил я сделать налоги на сервере, и что-бы мэр мог менять их. Причём нада что-бы было можно ставить например 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.
Reply
#2

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();

это должно исполнятся ОБЯЗАТЕЛЬНО(по правилу приведения типов вроде.. как то так )
Reply
#3

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"
Reply
#4

Может дробным, десятичной бывает только система счисления?
Reply
#5

Ну да, не придирайтесь к словам )
Reply
#6

т.е. как я понял нада делать так:
Code:
new Float:Price1;
Price1 = Price[vid]-((Price[vid]/100.0)*PERCENTAGEAUTOBUY);

и дальше использовать её как "floatround(Price1)"
Я правильно сделал?
Reply
#7

Так, всё разобрался, тока теперь проблема с самим числом, т.е. пишу например 0.05 а в результате получается 0.049999. В чём касяк?
Reply
#8

Quote:
Originally Posted by -Stranger-
View Post
Так, всё разобрался, тока теперь проблема с самим числом, т.е. пишу например 0.05 а в результате получается 0.049999. В чём касяк?
формат такой http://ru.wikipedia.org/wiki/IEEE_754
чтобы обрезать цифры при форматировании вместо %f используй %.2f (где вместо 2 нужное число цифр после запятой)
Reply
#9

floatround... там есть несколько типов округлений
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)