Просмотр полной версии : [Вопрос] Вид числа.
Здравствуйте, хотелось бы сделать на сервер, чтобы показатель суммы, был не просто 1000000 а отделялся тысячными и был такого формата. 1.000.000....1.000...100.000.000. Думаю суть ясна что хотелось бы добиться. Подскажите, как такое можно сделать?
Lars Keller
21.02.2015, 02:55
Здравствуйте, хотелось бы сделать на сервер, чтобы показатель суммы, был не просто 1000000 а отделялся тысячными и был такого формата. 1.000.000....1.000...100.000.000. Думаю суть ясна что хотелось бы добиться. Подскажите, как такое можно сделать?
float
$continue$
21.02.2015, 04:15
new Float: mooney_summa = 1.0;
printf("Сумма денег: %f", mooney_summa)
Mazzilla
21.02.2015, 06:54
Тоже интересовался этим вопросом, сейчас с утра решил попробовать и вот что получил. Возможно, в паблике есть что-нибудь попроще - меня хватило только на это)
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);
}
}
BaBuIIIkaDrifteR
21.02.2015, 10:27
А как сделать что бы не через точку показывало а через пробел ? UpUpUp Довно сам ищу ))
А как сделать что бы не через точку показывало а через пробел ? UpUpUp Довно сам ищу ))
смотрим пост выше,заменяем точечки на пробелы,радуемся.
Тоже интересовался этим вопросом, сейчас с утра решил попробовать и вот что получил. Возможно, в паблике есть что-нибудь попроще - меня хватило только на это)
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);
}
}
Подскажи пожалуйста, как применить это допустим в команду, или это относится ко всем числам в моде?
BaBuIIIkaDrifteR
21.02.2015, 14:25
Да как применить что бы допустим в диалоги MSGBOX показывало: У вас 1.000.000 $
Держите:
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);
}
}
Использование:
main()
{
new
money_string[8],
value = 1_000_000; // или value = 1000000, если вам так удобнее
ConvertNumber(value, money_string);
print(money_string);
}
BaBuIIIkaDrifteR
21.02.2015, 15:23
Держите:
stock ConvertNumber(value, copy_str[], size = sizeof(copy_str))
{
format(copy_str, size, "%i", value < 0 ? -value : value);
for(new i = strlen(copy_str) - 3; i > 0; i -= 3)
strins(copy_str, ".", i, size);
if(value < 0)
strins(copy_str, "-", 0, size);
}
Использование:
main()
{
new
money_string[8],
value = 1_000_000; // или value = 1000000, если Вам так удобнее
ConvertNumber(value, money_string);
print(money_string);
}
А как делается что показывалось допустим "playerid" или "clicked"
Это же не будет показывать имено сколько у игрока денег:
format(StringName,sizeof(StringName),"%sИгровые Деньги: %d$.\n",StringName,ConvertNumber(value, money_string);
Например:
new
out_string[32],
money_string[12];
ConvertNumber(PlayerInfo[playerid][pMoney], money_string);
format(out_string, 32, "Вы имеете сумму: $%s.", money_string);
Например у игрока есть тот же самый миллион, то вывод будет таковым:
Вы имеете сумму: $1.000.000.
Mazzilla
21.02.2015, 15:34
Держите:
stock ConvertNumber(value, copy_str[], size = sizeof(copy_str))
{
format(copy_str, size, "%i", value < 0 ? -value : value);
for(new i = strlen(copy_str) - 3; i > 0; i -= 3)
strins(copy_str, ".", i, size);
if(value < 0)
strins(copy_str, "-", 0, size);
}
Использование:
main()
{
new
money_string[8],
value = 1_000_000; // или value = 1000000, если Вам так удобнее
ConvertNumber(value, money_string);
print(money_string);
}
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);
}
В консоль в любом случае выводит положительное число, поэтому value < 0 ? -value : value бесполезно использовано)
Попробовал valstr, всё хорошо, вроде бы)
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, пример вашего использования покажите. Вы к размеру массива добавляли единицу под минус?
При использовании:
new
money_string[9],
value = -1_000_000;
ConvertNumber(value, money_string);
print(money_string);
Выводится: -1.000.000.
Может быть я Вас не так понял?
Mazzilla
21.02.2015, 15:38
Mazzilla, пример вашего использования покажите. Вы к размеру массива добавляли единицу под минус?
Ваш же пример и был взят:
main()
{
new
money_string[10],
value = -11_000_000; // или value = 1000000, если Вам так удобнее
ConvertNumber(value, money_string);
print(money_string);
}
И что у Вас выводит в данном случае?
Mazzilla
21.02.2015, 15:47
Вы меня не так поняли. Я взял ваш сток, добавил вывод в консоль (print) после превращения числа в строку (format): у меня при отрицательном и положительном входном значении выводило всегда положительное, откуда я сделал вывод, что value < 0 ? -value : value в вашем стоке было использовано за зря. Размер массива для минуса я увеличивал. Мой же сток, где использовал нативную valstr
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);
}
Выводит всё, как требуется. Вот, к чему я это писал.:blush:
Попробуйте использовать функцию с помощью valstr для значения: cellmax ( константа ). Отпишитесь о результатах )
Mazzilla
21.02.2015, 15:55
Попробуйте использовать функцию с помощью valstr для значения: cellmax ( константа ). Отпишитесь о результатах )
Ничего не вывело.:mosking: Ясно, понятно, можете удалить мои сообщения. :blum3:
Ничего не вывело.:mosking: Ясно, понятно, можете удалить мои сообщения. :blum3:
Ничего страшного. Просто valstr предназначена для не очень таких уж больших чисел, хотя должно предназначаться именно для того, чтобы конвертировать число в строку. Сервер просто напросто зависает и всё, как будто входит в рекурсию.
Если что, могу посоветовать очень хорошую функцию от Daniel_Cortez'а: Тык (http://pro-pawn.ru/showthread.php?3243). Это замена valstr, и проста в использовании ( как и тот же valstr ).
BaBuIIIkaDrifteR
21.02.2015, 16:02
Ничего страшного. Просто valstr предназначена для не очень таких уж больших чисел, хотя должно предназначаться именно для того, чтобы конвертировать число в строку. Сервер просто напросто зависает и всё, как будто входит в рекурсию.
Если что, могу посоветовать очень хорошую функцию от Daniel_Cortez'а: Тык (http://pro-pawn.ru/showthread.php?3243). Это замена valstr, и проста в использовании ( как и тот же valstr ).
Все на ура работает отлично )!
Mazzilla
21.02.2015, 16:06
Ничего страшного. Просто valstr предназначена для не очень таких уж больших чисел, хотя должно предназначаться именно для того, чтобы конвертировать число в строку. Сервер просто напросто зависает и всё, как будто входит в рекурсию.
Если что, могу посоветовать очень хорошую функцию от Daniel_Cortez'а: Тык (http://pro-pawn.ru/showthread.php?3243). Это замена valstr, и проста в использовании ( как и тот же valstr ).
Фикс функции лежит на вики, хотя я её ещё не тестировал и прекрасно работает)
Лежать-то лежит, а вот что внутри фикса:
// 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
Тот же format и используется. :mosking:
Как тогда в этом коде например использовать эту функцию:
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);
}
Mazzilla
21.02.2015, 16:53
Второе сообщение на второй странице, видимо, просто так висит. Почему за вас должны делать всё?
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);
}
На прошлой странице было всё разъяснено...
BaBuIIIkaDrifteR
21.02.2015, 19:42
Способ Londlem работает на отлично! Тестировал лично!
http://s7.hostingkartinok.com/uploads/images/2015/02/594c6e210ad631e9a7c0f5704b26c34c.png (http://hostingkartinok.com/show-image.php?id=594c6e210ad631e9a7c0f5704b26c34c)
У меня почему то выводит совершенно другое число. Передаю 100к пишет 49.
BaBuIIIkaDrifteR
22.02.2015, 00:04
У меня почему то выводит совершенно другое число. Передаю 100к пишет 49.
У вас наверно стоит Передал денег: $%d или $%i, а нужно что бы стояло: Передал денег: $%s
У вас наверно стоит Передал денег: $%d или $%i, а нужно что бы стояло: Передал денег: $%s
Да, спасибо больше)
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot