private static string MilesToFraction(this float milesFloat) { const int fractionsCount = 8; bool IsMileFraction(int Frac) { const float epsilon = 0.01f; //in miles int mileParts = Mathf.RoundToInt(milesFloat * (float)Frac); return((Mathf.Abs((float)Frac * milesFloat - (float)mileParts) < epsilon) && (mileParts != 0)); } string MileFraction(int Frac) { int mileParts = Mathf.RoundToInt(milesFloat * (float)Frac); if (Frac == 1) { return(mileParts.ToString()); } else { return(mileParts.ToString() + "/" + Frac.ToString()); } } //First try some nice fractions of a mile: 1/2, 1/3, 1/4 ... 1/8 for (int i = 1; i <= fractionsCount; i++) { if (IsMileFraction(i)) { return(MileFraction(i)); } } return(""); }