Meter2Feet

From Second Life Wiki
Revision as of 08:47, 12 September 2007 by Strife Onizuka (talk | contribs) (you are correct there is a border condition with llRound I didn't see BTW your code didn't compile. MUTL is better then DIV)
Jump to navigation Jump to search

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;
	}
	
	float fraction = meter * 3.2808399;	// Compute feet
	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;
	}
	
	float fraction = meter * 3.2808399;	// Compute feet
	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));
	}
}