private static string ConvertToArchitecturalString(Distance distance, int precision = 16)
{
//Convert into inches before proceeding
double workingValue = distance.MeasurementIn(new Inch()).Value;
//detect need for sign
string sign = "";
if (workingValue < 0)
{
sign = "-";
//if it is negative, then make it positive for the rest of the calculations
workingValue = workingValue * -1;
}
//get number of whole feet contained in inches by rounding down after calculation
double feet = Math.Floor(workingValue / 12);
//remove whole feet from inches
workingValue = workingValue - (feet * 12);
//save whole inches now that they are the largest unit
double inches = Math.Floor(workingValue);
//remove whole inches from working value, leaving only a fraction
workingValue = workingValue - inches;
double numerator = Math.Round(workingValue * precision);
//handles the case where the leftover fraction is rounded up to a whole inch
if (numerator == precision)
{
numerator = 0;
//handles the case where the rounded up inches is equal to 12
inches++;
if (inches == 12)
{
feet++;
inches = 0;
}
numerator = 0;
}
//if there is no leftover fraction then make the fractionString empty
string fractionString = (numerator == 0) ? "" : numerator + "/" + precision.ToString();
//if the value is less than a foot then make the feetString empty
string feetString = (feet == 0) ? "" : feet.ToString();
//if the value is less than a inches then make the inchesString empty
string inchesString = (inches == 0) ? "" : inches.ToString();
//if all valuse are present, insert both symbols
string inchesSymbol = "\"";
string feetSymbol = "'";
//if the value is an even footage make the inchesSymbol empty
if (fractionString == "" && inchesString == "")
{
inchesSymbol = "";
}
//if the feetString is empty make the feetSymbol empty
if (feetString == "")
{
feetSymbol = "";
}
//add and return all of the strings together, the only addition is a space that will be trimmed if there is no fraction
return (sign + feetString + feetSymbol + inchesString + " " + fractionString).Trim() + inchesSymbol;
}