Meter2Feet: Difference between revisions

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.
mNo edit summary
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 53: Line 55:
     }
     }
      
      
     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 81: Line 85:
         llOwnerSay(Meter2Feet(meter));
         llOwnerSay(Meter2Feet(meter));
     }
     }
}}</pre>
}</pre>
</div></div>
</div></div>
{{LSLC|Examples|Meter2Feet}}
{{LSLC|Examples|Meter2Feet}}

Revision as of 02:33, 13 September 2007

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.

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);
}

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));
    }
}