Difference between revisions of "Meter2Feet"

From Second Life Wiki
Jump to navigation Jump to search
(Your's didnt compile either, lol. And reciprocal value extended to guarantee for precision of result! Btw, I had checked my version by using LSLEditor, which compiled the code.)
m (<lsl> tag to <source>)
 
(2 intermediate revisions by one other user not shown)
Line 12: Line 12:
== Specification ==
== Specification ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
<pre>
<source lang="lsl2">
string Meter2Feet( float meter )
string Meter2Feet( float meter )
{
{
Line 22: Line 22:
     }
     }
      
      
     float fraction = meter * 3.2808398950131233595800524934383;    // Compute feet multiplying by reciprocal value  
     // Compute feet multiplying by reciprocal value of
     integer feet = (integer)fraction;      // of conversion constant 0.3048 for performance reasons
     // conversion constant 0.3048 for performance reasons
    float fraction = meter * 3.2808398950131233595800524934383;
    integer feet = (integer)fraction;
      
      
     fraction = (fraction - feet) * 12;    // Compute inches
     fraction = (fraction - feet) * 12;    // Compute inches
Line 36: Line 38:
     return (sign + (string)feet + "' " + (string)inches + strFraction);
     return (sign + (string)feet + "' " + (string)inches + strFraction);
}
}
</pre>
</source>
</div></div>
</div></div>


Line 43: Line 45:
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
Trivial example to listen to any chat from the object owner for '''{{LSL Param|meter}}''' values and respond feet/inch value.
Trivial example to listen to any chat from the object owner for '''{{LSL Param|meter}}''' values and respond feet/inch value.
<pre>
<source lang="lsl2">
string Meter2Feet( float meter )
// Insert code of Meter2Feet user function here
{
    string sign = "";
    if (meter < 0)
    {    // Use only positive value to simplify the maths
        sign = "-";
        meter = -meter;
    }
   
    float fraction = meter * 3.2808398950131233595800524934383;    // Compute feet multiplying by reciprocal value
    integer feet = (integer)fraction;      // of conversion constant 0.3048 for performance reasons
   
    fraction = (fraction - feet) * 12;    // Compute inches
    integer inches = (integer)fraction;
   
    fraction = llRound((fraction - inches) * 16);    // Compute 1/16 inches
       
    string strFraction = "\"";
    if (fraction != 0)    // show fraction value only if not zero
        strFraction = " " + (string)((integer)fraction) + "/16" + strFraction;


    return (sign + (string)feet + "' " + (string)inches + strFraction);
}


default
default
Line 81: Line 62:
         llOwnerSay(Meter2Feet(meter));
         llOwnerSay(Meter2Feet(meter));
     }
     }
}}</pre>
}</source>
</div></div>
</div></div>
{{LSLC|Examples|Meter2Feet}}
{{LSLC|Examples|Meter2Feet}}

Latest revision as of 17:19, 24 January 2015

Function: string Meter2Feet(float meter);

Returns a string of metric value meter converted to feet/inch in common representation, ie. 3' 4 5/16".

• float meter distance in meters, any valid float, positive or negative

Specification

string Meter2Feet( float meter )
{
    string sign = "";
    if (meter < 0)
    {    // Use only positive value to simplify the maths
        sign = "-";
        meter = -meter;
    }
    
    // Compute feet multiplying by reciprocal value of 
    //  conversion constant 0.3048 for performance reasons
    float fraction = meter * 3.2808398950131233595800524934383;
    integer feet = (integer)fraction;
    
    fraction = (fraction - feet) * 12;    // Compute inches
    integer inches = (integer)fraction;
    
    fraction = llRound((fraction - inches) * 16);    // Compute 1/16 inches
        
    string strFraction = "\"";
    if (fraction != 0)    // show fraction value only if not zero
        strFraction = " " + (string)((integer)fraction) + "/16" + strFraction;

    return (sign + (string)feet + "' " + (string)inches + strFraction);
}

Example

Trivial example to listen to any chat from the object owner for meter values and respond feet/inch value.

// Insert code of Meter2Feet user function here


default
{
    state_entry()
    {
        llOwnerSay("Enter: [m]");
        llListen(0, "", llGetOwner(), "");
    }
    
    listen(integer _chan, string _str, key _id, string _msg)
    {
        float meter = (float)_msg;
        llOwnerSay(Meter2Feet(meter));
    }
}