Difference between revisions of "Meter2Feet"

From Second Life Wiki
Jump to navigation Jump to search
m (1 ft = 0.3048m, see here: http://en.wikipedia.org/wiki/Foot_%28unit_of_length%29)
(Restored considering negative meter values)
Line 14: Line 14:
<pre>
<pre>
string Meter2Feet( float meter )
string Meter2Feet( float meter )
string Meter2Feet (float meter)
{
{
integer negative = FALSE;
if (meter < 0)
{ // Use only positive value to simplify the maths
negative = TRUE;
meter *= -1;
}
float fraction = meter / 0.3048; // Compute feet
float fraction = meter / 0.3048; // Compute feet
integer feet = (integer)fraction;
integer feet = llFloor(fraction);
fraction = (fraction - feet) * 12; // Compute inches
fraction = (fraction - feet) * 12; // Compute inches
integer inches = (integer)fraction;
integer inches = llFloor(fraction);
fraction = llRound((fraction - inches) * 16); // Compute 1/16 inches
fraction = llRound((fraction - inches) * 16); // Compute 1/16 inches
string strFeet = (string)feet;
string strFraction = "";
if (negative) // Reallocate sign to ensure showing up in case feet value is zero
if (fraction) // show fraction value only if not zero
strFeet = "-" + strFeet;
strFraction = " " + (string)llAbs((integer)fraction) + "/16";
return ((string)feet + "' " + (string)llAbs(inches) + strFraction+ "\"");
string strFraction = "\"";
if (fraction != 0) // show fraction value only if not zero
strFraction = " " + (string)(integer)fraction + "/16" + strFraction;
 
return (strFeet + "' " + (string)inches + strFraction);
}
}
</pre>
</pre>
Line 37: Line 49:
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>
<pre>
string Meter2Feet( float meter )
string Meter2Feet (float meter)
{
{
integer negative = FALSE;
if (meter < 0)
{ // Use only positive value to simplify the maths
negative = TRUE;
meter *= -1;
}
float fraction = meter / 0.3048; // Compute feet
float fraction = meter / 0.3048; // Compute feet
integer feet = (integer)fraction;
integer feet = llFloor(fraction);
fraction = (fraction - feet) * 12; // Compute inches
fraction = (fraction - feet) * 12; // Compute inches
integer inches = (integer)fraction;
integer inches = llFloor(fraction);
fraction = llRound((fraction - inches) * 16); // Compute 1/16 inches
fraction = llRound((fraction - inches) * 16); // Compute 1/16 inches
string strFeet = (string)feet;
string strFraction = "";
if (negative) // Reallocate sign to ensure showing up in case feet value is zero
if (fraction) // show fraction value only if not zero
strFeet = "-" + strFeet;
strFraction = " " + (string)llAbs((integer)fraction) + "/16";
return ((string)feet + "' " + (string)llAbs(inches) + strFraction+ "\"");
string strFraction = "\"";
if (fraction != 0) // show fraction value only if not zero
strFraction = " " + (string)(integer)fraction + "/16" + strFraction;
 
return (strFeet + "' " + (string)inches + strFraction);
}
}


Line 67: Line 90:
llOwnerSay(Meter2Feet(meter));
llOwnerSay(Meter2Feet(meter));
}
}
}</pre>
touch_start(integer n)
{
llOwnerSay( Meter2Feet( llVecDist( llGetPos(), llDetectedPos(0))));
}
}
</pre>
</div></div>
</div></div>
{{LSLC|Examples|Meter2Feet}}
{{LSLC|Examples|Meter2Feet}}

Revision as of 08:33, 12 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 Meter2Feet (float meter)
{
	integer negative = FALSE;
	if (meter < 0)
	{	// Use only positive value to simplify the maths
		negative = TRUE;
		meter *= -1;
	}
	
	float fraction = meter / 0.3048;	// Compute feet
	integer feet = llFloor(fraction);
	
	fraction = (fraction - feet) * 12;	// Compute inches
	integer inches = llFloor(fraction);
	
	fraction = llRound((fraction - inches) * 16);	// Compute 1/16 inches
	string strFeet = (string)feet;
	
	if (negative)	// Reallocate sign to ensure showing up in case feet value is zero
		strFeet = "-" + strFeet;
	
	string strFraction = "\"";
	if (fraction != 0)	// show fraction value only if not zero
		strFraction = " " + (string)(integer)fraction + "/16" + strFraction;

	return (strFeet + "' " + (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)
{
	integer negative = FALSE;
	if (meter < 0)
	{	// Use only positive value to simplify the maths
		negative = TRUE;
		meter *= -1;
	}
	
	float fraction = meter / 0.3048;	// Compute feet
	integer feet = llFloor(fraction);
	
	fraction = (fraction - feet) * 12;	// Compute inches
	integer inches = llFloor(fraction);
	
	fraction = llRound((fraction - inches) * 16);	// Compute 1/16 inches
	string strFeet = (string)feet;
	
	if (negative)	// Reallocate sign to ensure showing up in case feet value is zero
		strFeet = "-" + strFeet;
	
	string strFraction = "\"";
	if (fraction != 0)	// show fraction value only if not zero
		strFraction = " " + (string)(integer)fraction + "/16" + strFraction;

	return (strFeet + "' " + (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));
	}
}