static string UTMUPSString(int zone, bool northp, double easting, double northing, int prec, bool abbrev) { var os = new StringBuilder(); prec = Max(-5, Min(9 + 0 /*Math::extra_digits()*/, prec)); // Need extra real because, since C++11, pow(float, int) returns double var scale = prec < 0 ? Pow(10, -prec) : 1; os.Append(UTMUPS.EncodeZone(zone, northp, abbrev));// << fixed << setfill('0'); if (IsFinite(easting)) { os.Append(' '); os.Append((easting / scale).ToFixedString(Max(0, prec))); if (prec < 0 && Abs(easting / scale) > 0.5) { os.Append("0".PadLeft(-prec, '0')); } } else { os.Append(" nan"); } if (IsFinite(northing)) { os.Append(' '); os.Append((northing / scale).ToFixedString(Max(0, prec))); if (prec < 0 && Abs(northing / scale) > 0.5) { os.Append("0".PadLeft(-prec, '0')); } } else { os.Append(" nan"); } return(os.ToString()); }