AddThousandsSeparators
From SA-MP Wiki
(Difference between revisions)
Revision as of 12:14, 4 April 2016 Vince (Talk | contribs) (AddCommas moved to AddThousandsSeparators: Bad name. Separator may also be a dot or a space.) ← Previous diff |
Revision as of 12:29, 4 April 2016 Vince (Talk | contribs) (better, shorter and more straightforward version) Next diff → |
||
Line 7: | Line 7: | ||
{{Example2|AddCommasToInt(1234567);}} | {{Example2|AddCommasToInt(1234567);}} | ||
- | '''Author:''' [http://forum.sa-mp.com/index.php?action=profile;u=15707 Puffmac]. Edited by [http://forum.sa-mp.com/index.php?action=profile;u=90884 Kar] and WestSide | + | |
==Example== | ==Example== | ||
Line 17: | Line 17: | ||
==Definition== | ==Definition== | ||
+ | <pawn> | ||
+ | /** | ||
+ | * Adds thousands separators to a number and returns the result as a string. It | ||
+ | * seems only logical to start from the back and count groups of 3 until the | ||
+ | * front is reached. Works with any positive or negative 32 bit integer. | ||
+ | * | ||
+ | * @param int number value to add seperators to | ||
+ | * @param string separator the separator char | ||
+ | * @return string the formatted string | ||
+ | * @author Vince | ||
+ | */ | ||
+ | AddThousandsSeparators(number, const separator[] = ",") | ||
+ | { | ||
+ | new output[15]; // longest possible output given 32 bit integers: -2,147,483,648 | ||
+ | format(output, sizeof(output), "%d", number); | ||
+ | |||
+ | for(new i = strlen(output) - 3; i > 0 && output[i-1] != '-'; i -= 3) | ||
+ | { | ||
+ | strins(output, separator, i); | ||
+ | } | ||
+ | |||
+ | return output; | ||
+ | } | ||
+ | </pawn> | ||
+ | |||
+ | ==Other versions== | ||
+ | |||
+ | Version by [http://forum.sa-mp.com/index.php?action=profile;u=15707 Puffmac]. Edited by [http://forum.sa-mp.com/index.php?action=profile;u=90884 Kar] and WestSide | ||
<pawn> | <pawn> | ||
stock AddCommasToInt(number) | stock AddCommasToInt(number) | ||
Line 54: | Line 82: | ||
Version by DeimoS | Version by DeimoS | ||
- | ==Definition== | ||
<pawn>stock AddCommasToInt(number, delimiter[2] = ".") | <pawn>stock AddCommasToInt(number, delimiter[2] = ".") | ||
{ | { |
Revision as of 12:29, 4 April 2016
Contents |
Information
This function takes an integer, and returns a string formatted with commas (','), to make it easier to read. This can be very useful for scripts that use money, such as a lottery script.
Parameters:(number)
number | The integer you wish to format |
Return Values:
A string with commas placed after every three numbers
AddCommasToInt(1234567);
Example
AddCommasToInt(1234567); // Returns 1,234,567 AddCommasToInt(1234); // Returns 1,234 AddCommasToInt(123); // Returns 123
Definition
/** * Adds thousands separators to a number and returns the result as a string. It * seems only logical to start from the back and count groups of 3 until the * front is reached. Works with any positive or negative 32 bit integer. * * @param int number value to add seperators to * @param string separator the separator char * @return string the formatted string * @author Vince */ AddThousandsSeparators(number, const separator[] = ",") { new output[15]; // longest possible output given 32 bit integers: -2,147,483,648 format(output, sizeof(output), "%d", number); for(new i = strlen(output) - 3; i > 0 && output[i-1] != '-'; i -= 3) { strins(output, separator, i); } return output; }
Other versions
Version by Puffmac. Edited by Kar and WestSide
stock AddCommasToInt(number) { new tStr[16]; // Up to 9,999,999,999,999 new number2 = number; if(number < 0) number = number * -1; format(tStr, sizeof(tStr), "%d", number); if(strlen(tStr) < 4) return tStr; new iPos = strlen(tStr), iCount = 1; while(iPos > 0) { if(iCount == 4) { iCount = 0; strins(tStr, ",", iPos, 1); iPos++; } iCount++; iPos--; } if(number2 < 0) format(tStr, sizeof(tStr), "-%s", tStr); return tStr; }
Version by DeimoS
stock AddCommasToInt(number, delimiter[2] = ".") { new int_string[10+3+1+1]; /* The maximum value for the Integer: "-2147483647" to "2147483647" Consequently, transmit greater than this value as a parameter impossible (only if we make "number" parameter as string) Declare 10 cells for the number and 3 cells for the delimiters for the largest possible number and 1 cell for minus and 1 and cell for the null-character. */ format(int_string, sizeof(int_string), "%d", number >= 0 ? number : -number); //If the number is positive - we write it in the usual way. Otherwise, convert it to a positive number, adding a minus new value = strlen(int_string); // Write in "i" length of the string with the our number switch(value) { case 4..6: // If the number has passed from 4 up to 6 characters, add a delimiter strins(int_string, delimiter, value-3,1); case 7..9: // From 7 to 9 characters - two delimiters strins(int_string, delimiter, value-3,1), strins(int_string, delimiter, value-6,1); case 10..12: // From 10 to 12 characters - three delimiters strins(int_string, delimiter, value-3,1), strins(int_string, delimiter, value-6,1), strins(int_string, delimiter, value-9,1); } if(number < 0) strins(int_string, "-", 0); // If the number is negative, it return him minus return int_string; }