04.07.2017, 12:16
(
Last edited by Johhnyllll; 04/07/2017 at 12:55 PM.
)
Всем привет.
Из-за того что я использую для своего сервера центы испытываю проблемы с большими числами. Проблема в том что если у игрока 12345678.95$ в БД сохранится только 12345678.00. Что бы решить эту проблему я начал искать по форому и наткнулся на две темы:
Подключил все инклуды с ссылок выше и еще одну функцию автором которая является eXeGOODER.
На выходе мы получаем это:
Теперь уменьшаем число до 567891.34. На выходе получает это:
Уже всё по лучше.
Играя с числами я понял что после 7999999.74 ни одна из функций не выводит числа после точки.
Пример: 7999999.75 = 8000000.00
Вопрос: Можно ли как то сделать DECIMAL для PAWN что бы всё работало правильно?
P.S: Так-же есть вариант что при использования плагинов можно добиться нормальной работы Float-a, но у меня недостаточно знаний для этого.
Из-за того что я использую для своего сервера центы испытываю проблемы с большими числами. Проблема в том что если у игрока 12345678.95$ в БД сохранится только 12345678.00. Что бы решить эту проблему я начал искать по форому и наткнулся на две темы:
- https://sampforum.blast.hk/showthread.php?tid=610752
- https://sampforum.blast.hk/showthread.php?tid=184328
Подключил все инклуды с ссылок выше и еще одну функцию автором которая является eXeGOODER.
PHP Code:
#include <a_samp>
#include <sscanf2>
#include <cash>
main()
{
new Float: fFloat = 12345678.96;
new dollar, cent;
printf(FormatNumber(fFloat, 2,',','.')); //formatnumber
printf(FormatNumber(fFloat,0)); //formatnumber
DecimalPoint(fFloat); // Decimal Point
Cash_Truncate(fFloat, dollar, cent); //by eXeGOODER
printf("Simple: %.2f",fFloat); // Обычный Float
}
stock Cash_Truncate(Float: cash, &dollar, ¢)
{
new tmp[16];
format(tmp, sizeof tmp, "%f", cash);
printf("\nCash_Truncate: %s",tmp);
sscanf(tmp,"p<.>dd",dollar,cent);
printf("Cash_Truncate: %d.%d\n",dollar,cent);
}
stock DecimalPoint(Float:money)
{
new str[16];
if(money >= 0)
{
format(str, sizeof(str), "%.2f$", money);
if(1000 <= money < 10000) strins(str, ",", 2, sizeof(str));
else if(10000 <= money < 100000) strins(str, ",", 3, sizeof(str));
else if(100000 <= money < 1000000) strins(str, ",", 4, sizeof(str));
else if(1000000 <= money < 10000000) { strins(str, ",", 2, sizeof(str)); strins(str, ",", 6, sizeof(str)); }
else if(10000000 <= money < 100000000) { strins(str, ",", 3, sizeof(str)); strins(str, ",", 7, sizeof(str)); }
else if(100000000 <= money < 1000000000) { strins(str, ",", 4, sizeof(str)); strins(str, ",", 8, sizeof(str)); }
else if(money >= 1000000000) { strins(str, ",", 2, sizeof(str)); strins(str, ",", 6, sizeof(str)); strins(str, ",", 10, sizeof(str)); }
printf("%.2f",money);
}
else
{
format(str, sizeof(str), "-%.2f$", money-(money*2));
if(-1000 >= money > -10000) strins(str, ",", 3, sizeof(str));
else if(-10000 >= money > -100000) strins(str, ",", 4, sizeof(str));
else if(-100000 >= money > -1000000) strins(str, ",", 5, sizeof(str));
else if(-1000000 >= money > -10000000) { strins(str, ",", 3, sizeof(str)); strins(str, ",", 7, sizeof(str)); }
else if(-10000000 >= money > -100000000) { strins(str, ",", 4, sizeof(str)); strins(str, ",", 8, sizeof(str)); }
else if(-100000000 >= money > -1000000000) { strins(str, ",", 5, sizeof(str)); strins(str, ",", 9, sizeof(str)); }
else if(money <= -1000000000) { strins(str, ",", 3, sizeof(str)); strins(str, ",", 7, sizeof(str)); strins(str, ",", 11, sizeof(str));}
}
return str;
}
Теперь уменьшаем число до 567891.34. На выходе получает это:
Уже всё по лучше.
Играя с числами я понял что после 7999999.74 ни одна из функций не выводит числа после точки.
Пример: 7999999.75 = 8000000.00
Вопрос: Можно ли как то сделать DECIMAL для PAWN что бы всё работало правильно?
P.S: Так-же есть вариант что при использования плагинов можно добиться нормальной работы Float-a, но у меня недостаточно знаний для этого.