Как побочный продукт моей дискуссии с Дэвидом М. и Даниэлем Брюкнером под этим ответом и частично неверным утверждением мной под этого ответа Адама стало ясно, чтосказать, что все ответы являются только частично правильными.Происходит следующее:
// example (all x, y, z ar ints):
Decimal d = x + y + z / 60M;
// is left to right evaluated as
Decimal d = x + y + (((Decimal) z) / 60M);
// when doing addition, this is what happens when you add integers and something else:
Decimal d = x + y + (int) (((Decimal) z) / 60M);
// which will yield a truncated result.
Результат: просто добавление 60M
или 60.0
ко всему утверждению, как было предложено , не будет (илине может) дать желаемый результат, в зависимости от порядка выполнения оператора и / или наличия сложения / вычитания, как в случае с вопросом ОП.
Чтобы исправить это, следуйте советам Адама и преобразуйте каждоешаг сложения / вычитания в десятичные дроби, используйте десятичные дроби все время (не очень понятно) или поместите вычисление в небольшую функцию, которая принимает десятичные дроби в качестве параметров, вызывая неявное преобразование:короче и добавляет читабельности.Назовите это следующим утверждением:
converterDecimalCoordinates.Latitude = GetDecimalLatitude(
CartesianCoordinates.LatitudeHours,
CartesianCoordinates.LatitudeMinutes,
CartesianCoordinates.LatitudeSeconds);