public static bool TryParseSpeed(string s, out KilometerPerHour result) { result = (KilometerPerHour)double.MaxValue; if (string.IsNullOrWhiteSpace(s) || (int)s[0] != 48 && (int)s[0] != 49 && ((int)s[0] != 50 && (int)s[0] != 51) && ((int)s[0] != 52 && (int)s[0] != 53 && ((int)s[0] != 54 && (int)s[0] != 55)) && ((int)s[0] != 56 && (int)s[0] != 57) || s.Contains(",")) { return(false); } double result1; if (double.TryParse(s, NumberStyles.Any, (IFormatProvider)CultureInfo.InvariantCulture, out result1)) { result = (KilometerPerHour)result1; } if (KilometerPerHour.TryParse(s, out result)) { return(true); } MilesPerHour result2; if (MilesPerHour.TryParse(s, out result2)) { result = (KilometerPerHour)result2; return(true); } Knots result3; if (!Knots.TryParse(s, out result3)) { return(false); } result = (KilometerPerHour)result3; return(true); }
/// <summary> /// Tries to parse a speed value from a given tag-value. /// </summary> /// <param name="s"></param> /// <param name="result"></param> /// <returns></returns> public static bool TryParseSpeed(string s, out KilometerPerHour result) { result = double.MaxValue; if (string.IsNullOrWhiteSpace(s)) { return(false); } if (s[0] != '0' && s[0] != '1' && s[0] != '2' && s[0] != '3' && s[0] != '4' && s[0] != '5' && s[0] != '6' && s[0] != '7' && s[0] != '8' && s[0] != '9') { // performance inprovement, quick negative answer. return(false); } if (s.Contains(',')) { // refuse comma as a decimal seperator or anywhere else in the number. return(false); } // try regular speed: convention in OSM is km/h in this case. double kmphDouble; if (double.TryParse(s, NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out kmphDouble)) { result = kmphDouble; } // try km/h if (KilometerPerHour.TryParse(s, out result)) { return(true); } // try mph. MilesPerHour resultMph; if (MilesPerHour.TryParse(s, out resultMph)) { result = resultMph; return(true); } // try knots. Knots resultKnots; if (Knots.TryParse(s, out resultKnots)) { result = resultKnots; return(true); } return(false); }
public void TestKilometerPerHour() { // initialize value. KilometerPerHour ten = 10; // convert from. Knots tenInKnots = 5.39956803; MeterPerSecond tenInMeterPerSecond = 2.77777777778; MilesPerHour tenInMilesPerHour = 6.21371192; // test converts to. Assert.AreEqual(ten.Value, ((KilometerPerHour)tenInKnots).Value, 0.000001); Assert.AreEqual(ten.Value, ((KilometerPerHour)tenInMeterPerSecond).Value, 0.000001); Assert.AreEqual(ten.Value, ((KilometerPerHour)tenInMilesPerHour).Value, 0.000001); // tests division of distance with time resulting in speed. Kilometer twenty = ten * (Hour)2; Assert.AreEqual(20, twenty.Value); // tests some parsing functions. KilometerPerHour tenPointFive = 10.5; KilometerPerHour tenPointFiveParsed; Assert.IsTrue(KilometerPerHour.TryParse(tenPointFive.ToString(), out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5 km/h", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5 kmh", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5 kph", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5 kmph", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5km/h", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5kmh", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5kph", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsTrue(KilometerPerHour.TryParse("10.5kmph", out tenPointFiveParsed)); Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value); Assert.IsFalse(KilometerPerHour.TryParse("10.5 m/s", out tenPointFiveParsed)); Assert.IsFalse(KilometerPerHour.TryParse("10.5 mph", out tenPointFiveParsed)); Assert.IsFalse(KilometerPerHour.TryParse("10.5 knots", out tenPointFiveParsed)); }