Format Decimal: Difference between revisions
Jump to navigation
Jump to search
Huney Jewell (talk | contribs) Added some further explanation |
m just fiddling |
||
| Line 1: | Line 1: | ||
{{LSL Header}}__NOTOC__ | {{LSL Header}}__NOTOC__ | ||
<div id="box"> | <div id="box">{{#vardefine:p_number_desc|any valid float, positive or negative | ||
== Function: [[string]] FormatDecimal([[float]] number, [[integer]] precision); == | }}{{#vardefine:p_precision_desc|precision of result. Positive values truncate fraction, negative values truncate integer part of '''number''' | ||
}} | |||
== Function: [[string]] FormatDecimal([[float]] {{LSL Param|number}}, [[integer]] {{LSL Param|precision}}); == | |||
<div style="padding: 0.5em;"> | <div style="padding: 0.5em;"> | ||
''Formats a float value to a fixed precision ie. for display purposes'' | ''Formats a float value to a fixed precision ie. for display purposes'' | ||
Returns a [[String|string]] that comprises the '''number''' truncated and rounded to the given '''precision'''. | Returns a [[String|string]] that comprises the '''number''' truncated and rounded to the given '''precision'''. | ||
{ | {| | ||
{{LSL DefineRow|[[float]]|number| | {{LSL DefineRow|[[float]]|number|{{#var:p_number_desc}}}} | ||
{{LSL DefineRow|[[integer]]|precision| | {{LSL DefineRow|[[integer]]|precision|{{#var:p_precision_desc}}}} | ||
}} | |} | ||
<br/> | <br/> | ||
{| | {| {{Prettytable}} | ||
|-{{Hl2}} | |-{{Hl2}} | ||
!precision | !{{LSL Param|precision}} | ||
!Value | !Value | ||
|- | |- | ||
| Line 25: | Line 26: | ||
|negative | |negative | ||
|Rounds ''number'' at this pre-decimal position | |Rounds ''number'' at this pre-decimal position | ||
|} | |} | ||
</div></div> | </div></div> | ||
Revision as of 00:19, 10 September 2007
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
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.
| • float | number | – | any valid float, positive or negative | |
| • integer | precision | – | precision of result. Positive values truncate fraction, negative values truncate integer part of number |
| 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:
FormatDecimal(123.456, 2); // Result: 123.46
FormatDecimal(-123.456, 2); // Result: -123.46
FormatDecimal(123.456, 0); // Result: 123
FormatDecimal(-123.456, -2); // Result: -100
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.
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);
}
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));
}
}