Difference between revisions of "Format Decimal"
Jump to navigation
Jump to search
m (just fiddling) |
Huney Jewell (talk | contribs) (Well fiddled, Strife. Now fiddling to the excess :-)) but how to center justify entries in table "Examples"?) |
||
Line 7: | Line 7: | ||
''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 '''{{LSL Param|number}}''' truncated and rounded to the given '''{{LSL Param|precision}}'''. | ||
{| | {| | ||
{{LSL DefineRow|[[float]]|number|{{#var:p_number_desc}}}} | {{LSL DefineRow|[[float]]|number|{{#var:p_number_desc}}}} | ||
Line 19: | Line 19: | ||
|- | |- | ||
|positive | |positive | ||
|Truncates ''number'' rounded to this fraction positions | |Truncates ''{{LSL Param|number}}'' rounded to this fraction positions | ||
|- | |- | ||
|zero | |zero | ||
|Truncates ''number'' rounded to it's integer value | |Truncates ''{{LSL Param|number}}'' rounded to it's integer value | ||
|- | |- | ||
|negative | |negative | ||
|Rounds ''number'' at this pre-decimal position | |Rounds ''{{LSL Param|number}}'' at this pre-decimal position | ||
|} | |} | ||
</div></div> | </div></div> | ||
Line 49: | Line 49: | ||
return llGetSubString(strNumber, 0, llSubStringIndex(strNumber, ".") + precision); | return llGetSubString(strNumber, 0, llSubStringIndex(strNumber, ".") + precision); | ||
} | } | ||
</pre>'''Examples:''' | </pre> | ||
'''Examples:''' | |||
{| {{Prettytable}} | |||
|-{{Hl2}} | |||
!{{LSL Param|number}} | |||
!{{LSL Param|precision}} | |||
!Result | |||
|- | |||
|123.456 | |||
|2 | |||
|123.46 | |||
|- | |||
| -123.456 | |||
|2 | |||
| -123.46 | |||
|- | |||
|123.456 | |||
|0 | |||
|123 | |||
|- | |||
|123.456 | |||
| -2 | |||
|100 | |||
|} | |||
</div></div><div id="box"> | </div></div><div id="box"> | ||
== Caveats == | == Caveats == | ||
Line 62: | Line 81: | ||
== Example == | == Example == | ||
<div style="padding: 0.5em;"> | <div style="padding: 0.5em;"> | ||
Trivial example to listen to any chat from the object owner for ''number,precision'' values and respond formatted value. | Trivial example to listen to any chat from the object owner for ''{{LSL Param|number}}, {{LSL Param|precision}}'' values and respond formatted value. | ||
<pre> | <pre> | ||
string FormatDecimal (float number, integer precision) | string FormatDecimal (float number, integer precision) |
Revision as of 03:43, 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:
number | precision | Result |
---|---|---|
123.456 | 2 | 123.46 |
-123.456 | 2 | -123.46 |
123.456 | 0 | 123 |
123.456 | -2 | 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)); } }