using System; using System.Collections.Generic; using System.Globalization; namespace Developpez.Dotnet.Language { internal static class SpellerHelper { public static void SplitDouble(double value, int decimalPlaces, bool trimTrailingDecimalZeros, out long integralPart, out long decimalPart, out int zerosAfterDecimal) { double i = Math.Truncate(value); double d = Math.Round(Math.Abs((value - i)), decimalPlaces); int z = 0; for (int k = 0; k < decimalPlaces; k++) { d *= 10; if (d < 1.0) z++; } integralPart = (long)Math.Abs(i); decimalPart = (long)Math.Round(d); while (trimTrailingDecimalZeros && decimalPart != 0 && decimalPart % 10 == 0) decimalPart /= 10; zerosAfterDecimal = z; } public static void SplitDecimal(decimal value, int decimalPlaces, bool trimTrailingDecimalZeros, out long integralPart, out long decimalPart, out int zerosAfterDecimal) { decimal i = Math.Truncate(value); decimal d = Math.Round(Math.Abs((value - i)), decimalPlaces); int z = 0; for (int k = 0; k < decimalPlaces; k++) { d *= 10; if (d < 1.0m) z++; } integralPart = (long)Math.Abs(i); decimalPart = (long)d; while (trimTrailingDecimalZeros && decimalPart != 0 && decimalPart % 10 == 0) decimalPart /= 10; zerosAfterDecimal = z; } public static IEnumerable GetCultureAndParents(CultureInfo culture) { CultureInfo tmp = culture; while (tmp != null) { yield return tmp; if (tmp.Equals(tmp.Parent)) yield break; tmp = tmp.Parent; } } } }