diff --git a/src/blackmisc/pq/measurementunit.h b/src/blackmisc/pq/measurementunit.h index 05120ac2a..c51202acf 100644 --- a/src/blackmisc/pq/measurementunit.h +++ b/src/blackmisc/pq/measurementunit.h @@ -146,12 +146,11 @@ namespace BlackMisc { using BlackMisc::Math::CMathUtils; double part1 = CMathUtils::trunc(factor / FactorPolicy::factor()); - double remaining = std::fmod(factor, FactorPolicy::factor()); - double part2 = CMathUtils::trunc(remaining / SubdivPolicy::subfactor()); - remaining = std::fmod(remaining, SubdivPolicy::subfactor()); - double part3 = CMathUtils::trunc(remaining / SubdivPolicy::subfactor()); - remaining = std::fmod(remaining, SubdivPolicy::subfactor()); - return part1 + part2 / SubdivPolicy::fraction() + (part3 + remaining) / (SubdivPolicy::fraction() * SubdivPolicy::fraction()); + double remaining = std::fmod(factor / FactorPolicy::factor(), 1.0); + double part2 = CMathUtils::trunc(remaining * SubdivPolicy::subfactor()); + remaining = std::fmod(remaining * SubdivPolicy::subfactor(), 1.0); + double part3 = remaining * SubdivPolicy::subfactor(); + return part1 + part2 / SubdivPolicy::fraction() + part3 / (SubdivPolicy::fraction() * SubdivPolicy::fraction()); } }; diff --git a/tests/blackmisc/testphysicalquantities.cpp b/tests/blackmisc/testphysicalquantities.cpp index 49198e4cb..759ee9a16 100644 --- a/tests/blackmisc/testphysicalquantities.cpp +++ b/tests/blackmisc/testphysicalquantities.cpp @@ -105,6 +105,12 @@ namespace BlackMiscTest QVERIFY2(CMathUtils::epsilonEqual(a3.valueRounded(CAngleUnit::deg()), 35.73), "Expecting 35.73"); QVERIFY2(CMathUtils::epsilonEqual(a4.valueRounded(CAngleUnit::deg()), 35.73), "Expecting 35.73"); QVERIFY2(CMathUtils::epsilonEqual(a5.valueRounded(CAngleUnit::deg(), 4), -60.5042), "Expecting -60.5042"); + + // issue #552 + CAngle a6(48.07063588, CAngleUnit::sexagesimalDeg()); + CAngle a7(a6); + a7.switchUnit(CAngleUnit::rad()); + QVERIFY2(CMathUtils::epsilonEqual(a6.value(CAngleUnit::sexagesimalDeg()), a7.value(CAngleUnit::sexagesimalDeg())), "Conversion via radians yields same answer"); } /*