Skip to content
lsl.devlsl.devLSL Dev

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
Returns a string that comprises the number truncated and rounded to the given precision.

precisionValue
positiveTruncates number rounded to this fraction positions
zeroTruncates number rounded to it's integer value
negativeRounds 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:
numberprecisionResultCode
123.4562123.46FormatDecimal(123.456, 2)
-123.4562 -123.46FormatDecimal(-123.456, 2)
123.4560123FormatDecimal(123.456, 0)
123.456 -2100FormatDecimal(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.

From the Second Life Wiki

Community documentation adapted from Format Decimal, by Linden Research, Inc. and contributing residents.View contributors and history.

Imported wiki revision:

Licensed under CC BY-SA 3.0. Last wiki edit: .Formatting and links have been adapted for this site; API metadata follows the LSL definitions.