Format Decimal
LSL Header:
{{LSL Header}}__NOTOC__Function: string FormatDecimal(float number, integer precision);
Formats a float value to a fixed precision ie. for display purposes
precision | Value |
|---|---|
| positive | Truncates number rounded to this fraction positions |
| zero | Truncates number rounded to it's integer value |
| negative | Rounds number at this pre-decimal position |
Specification
string FormatDecimal(float number, integer precision)
{
float roundingValue = llPow(10, -precision)*0.5;
float rounded;
if (number < 0) rounded = number - roundingValue;
else rounded = number + roundingValue;
if (precision < 1) // Rounding integer value
{
integer intRounding = (integer)llPow(10, -precision);
rounded = (integer)rounded/intRounding*intRounding;
precision = -1; // Don't truncate integer value
}
string strNumber = (string)rounded;
return llGetSubString(strNumber, 0, llSubStringIndex(strNumber, ".") + precision);
}Examples:
number | precision | Result | Code |
|---|---|---|---|
| 123.456 | 2 | 123.46 | FormatDecimal(123.456, 2) |
| -123.456 | 2 | -123.46 | FormatDecimal(-123.456, 2) |
| 123.456 | 0 | 123 | FormatDecimal(123.456, 0) |
| 123.456 | -2 | 100 | FormatDecimal(123.456, -2) |
Caveats
Maximum value is restricted to integer range, that is -2,147,483,648 to +2,147,483,647
Example
Trivial example to listen to any chat from the object owner for
number, precision values and respond formatted value.// Insert code of FormatDecimal user function here
default
{
state_entry()
{
llOwnerSay("Enter: [number,precision]");
llListen(0, "", llGetOwner(), "");
}
listen(integer _chan, string _str, key _id, string _msg)
{
list values=llCSV2List(_msg);
float number = llList2Float(values,0);
integer decimals = llList2Integer(values,1);
llOwnerSay("Number " + (string)number + " is formatted " + FormatDecimal(number, decimals));
}
}Original wiki source
Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.