Здравствуйте, хотелось бы сделать на сервер, чтобы показатель суммы, был не просто 1000000 а отделялся тысячными и был такого формата. 1.000.000....1.000...100.000.000. Думаю суть ясна что хотелось бы добиться. Подскажите, как такое можно сделать?
Вид для печати
Здравствуйте, хотелось бы сделать на сервер, чтобы показатель суммы, был не просто 1000000 а отделялся тысячными и был такого формата. 1.000.000....1.000...100.000.000. Думаю суть ясна что хотелось бы добиться. Подскажите, как такое можно сделать?
Что?
PHP код:
new Float: mooney_summa = 1.0;
printf("Сумма денег: %f", mooney_summa)
Тоже интересовался этим вопросом, сейчас с утра решил попробовать и вот что получил. Возможно, в паблике есть что-нибудь попроще - меня хватило только на это)
PHP код:
new number = 12345678910;
main()
{
if(1000 <= number <= 999999)
{
printf("%d.%03d", number/1000, number%1000);
}
else if(1000000 <= number <= 9999999)
{
printf("%d.%03d.%03d", number/1000000, (number/1000)%1000, number%1000);
}
else
{
printf("%d.%03d.%03d.%03d", number/1000000000, (number/1000000)%1000, (number/1000)%1000, number%1000);
}
}
А как сделать что бы не через точку показывало а через пробел ? UpUpUp Довно сам ищу ))
Да как применить что бы допустим в диалоги MSGBOX показывало: У вас 1.000.000 $
Держите:
Использование:PHP код:
ConvertNumber(value, ret_str[], ret_size = sizeof(ret_str)) {
format(ret_str, ret_size, "%i", value < 0 ? -value : value);
for (new i = strlen(ret_str); (i -= 3) > 0;) {
strins(ret_str, ".", i, ret_size);
}
if (value < 0) {
strins(ret_str, "-", 0, ret_size);
}
}
PHP код:
main()
{
new
money_string[8],
value = 1_000_000; // или value = 1000000, если вам так удобнее
ConvertNumber(value, money_string);
print(money_string);
}
Например:
Например у игрока есть тот же самый миллион, то вывод будет таковым:PHP код:
new
out_string[32],
money_string[12];
ConvertNumber(PlayerInfo[playerid][pMoney], money_string);
format(out_string, 32, "Вы имеете сумму: $%s.", money_string);
Код:Вы имеете сумму: $1.000.000.
В консоль в любом случае выводит положительное число, поэтому value < 0 ? -value : value бесполезно использовано)PHP код:
stock ConvertNumber(value, copy_str[], size = sizeof(copy_str))
{
format(copy_str, size, "%i", value < 0 ? -value : value);
print(copy_str);
for(new i = strlen(copy_str) - 3; i > 0; i -= 3)
strins(copy_str, ".", i, size);
//if(value < 0)
// strins(copy_str, "-", 0, size);
}
Попробовал valstr, всё хорошо, вроде бы)
PHP код:
stock ConvertNumber(value, copy_str[], size = sizeof(copy_str))
{
valstr(copy_str, value);
for(new i = strlen(copy_str) - 3; i > 0; i -= 3)
strins(copy_str, ".", i, size);
}
Mazzilla, пример вашего использования покажите. Вы к размеру массива добавляли единицу под минус?
При использовании:
Выводится: -1.000.000.PHP код:
new
money_string[9],
value = -1_000_000;
ConvertNumber(value, money_string);
print(money_string);
Может быть я Вас не так понял?
И что у Вас выводит в данном случае?
Вы меня не так поняли. Я взял ваш сток, добавил вывод в консоль (print) после превращения числа в строку (format): у меня при отрицательном и положительном входном значении выводило всегда положительное, откуда я сделал вывод, что value < 0 ? -value : value в вашем стоке было использовано за зря. Размер массива для минуса я увеличивал. Мой же сток, где использовал нативную valstr
Выводит всё, как требуется. Вот, к чему я это писал.:blush:PHP код:
stock ConvertNumber(value, copy_str[], size = sizeof(copy_str))
{
valstr(copy_str, value);
for(new i = strlen(copy_str) - 3; i > 0; i -= 3)
strins(copy_str, ".", i, size);
}
Попробуйте использовать функцию с помощью valstr для значения: cellmax ( константа ). Отпишитесь о результатах )
Ничего страшного. Просто valstr предназначена для не очень таких уж больших чисел, хотя должно предназначаться именно для того, чтобы конвертировать число в строку. Сервер просто напросто зависает и всё, как будто входит в рекурсию.
Если что, могу посоветовать очень хорошую функцию от Daniel_Cortez'а: Тык. Это замена valstr, и проста в использовании ( как и тот же valstr ).
Лежать-то лежит, а вот что внутри фикса:
Тот же format и используется. :mosking:PHP код:
// valstr fix by Slice
stock FIX_valstr(dest[], value, bool:pack = false)
{
// format can't handle cellmin properly
static const cellmin_value[] = !"-2147483648";
if (value == cellmin)
pack && strpack(dest, cellmin_value, 12) || strunpack(dest, cellmin_value, 12);
else
format(dest, 12, "%d", value), pack && strpack(dest, dest, 12);
}
#define valstr FIX_valstr
Как тогда в этом коде например использовать эту функцию:
PHP код:
if (moneys > 0 && playermoney >= moneys)
{
PlayerInfo[giveplayerid][pMoney] += moneys;
PlayerInfo[playerid][pMoney] -= moneys;
format(string, sizeof(string), "Вы передали игроку %s, $%d.", giveplayer, moneys);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
SendClientMessage(playerid, COLOR_GRAD1, string);
format(string, sizeof(string), "Вы получили $%d от %s.", moneys, sendername);
SendClientMessage(giveplayerid, COLOR_GRAD1, string);
log("Pay", string);
PlayerPlaySound(giveplayerid, 1052, 0.0, 0.0, 0.0);
format(string, sizeof(string), "достал деньги и передал их %s." ,giveplayer);
Action(playerid, string);
}
Второе сообщение на второй странице, видимо, просто так висит. Почему за вас должны делать всё?
На прошлой странице было всё разъяснено...PHP код:
if (moneys > 0 && playermoney >= moneys)
{
PlayerInfo[giveplayerid][pMoney] += moneys;
PlayerInfo[playerid][pMoney] -= moneys;
new
money_string[12];
ConvertNumber(moneys, money_string);
format(string, sizeof(string), "Вы передали игроку %s, $%s.", giveplayer, money_string);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
SendClientMessage(playerid, COLOR_GRAD1, string);
format(string, sizeof(string), "Вы получили $%s от %s.", money_string, sendername);
SendClientMessage(giveplayerid, COLOR_GRAD1, string);
log("Pay", string);
PlayerPlaySound(giveplayerid, 1052, 0.0, 0.0, 0.0);
format(string, sizeof(string), "достал деньги и передал их %s." ,giveplayer);
Action(playerid, string);
}
Способ Londlem работает на отлично! Тестировал лично!
http://s7.hostingkartinok.com/upload...704b26c34c.png
У меня почему то выводит совершенно другое число. Передаю 100к пишет 49.