diff --git a/src/CalcManager/NumberFormattingUtils.cpp b/src/CalcManager/NumberFormattingUtils.cpp index f535cecb..63563972 100644 --- a/src/CalcManager/NumberFormattingUtils.cpp +++ b/src/CalcManager/NumberFormattingUtils.cpp @@ -50,7 +50,7 @@ namespace CalcManager::NumberFormattingUtils /// the number unsigned int GetNumberDigitsWholeNumberPart(double value) { - return value == 0 ? 1 : (1 + static_cast(log10(abs(value)))); + return value == 0 ? 1u : static_cast(1 + max(0.0, log10(abs(value)))); } /// diff --git a/src/CalcManager/UnitConverter.cpp b/src/CalcManager/UnitConverter.cpp index f7a413b7..ec85e57b 100644 --- a/src/CalcManager/UnitConverter.cpp +++ b/src/CalcManager/UnitConverter.cpp @@ -905,7 +905,8 @@ void UnitConverter::Calculate() { // Fewer digits are needed following the decimal if the number is large, // we calculate the number of decimals necessary based on the number of digits in the integer part. - precision = max(0U, max(OPTIMALDIGITSALLOWED, min(MAXIMUMDIGITSALLOWED, currentNumberSignificantDigits)) - numPreDecimal); + auto numberDigits = max(OPTIMALDIGITSALLOWED, min(MAXIMUMDIGITSALLOWED, currentNumberSignificantDigits)); + precision = numberDigits > numPreDecimal ? numberDigits - numPreDecimal : 0; } m_returnDisplay = RoundSignificantDigits(returnValue, precision); diff --git a/src/CalculatorUnitTests/CalculatorManagerTest.cpp b/src/CalculatorUnitTests/CalculatorManagerTest.cpp index ab8e83e8..eb726405 100644 --- a/src/CalculatorUnitTests/CalculatorManagerTest.cpp +++ b/src/CalculatorUnitTests/CalculatorManagerTest.cpp @@ -970,6 +970,10 @@ namespace CalculatorManagerTest VERIFY_ARE_EQUAL(digitsCount, 15); digitsCount = GetNumberDigitsWholeNumberPart(324328412837382.232213214324234); VERIFY_ARE_EQUAL(digitsCount, 15); + digitsCount = GetNumberDigitsWholeNumberPart(0.032); + VERIFY_ARE_EQUAL(digitsCount, 1); + digitsCount = GetNumberDigitsWholeNumberPart(0.00000000000000000001); + VERIFY_ARE_EQUAL(digitsCount, 1); } void CalculatorManagerTest::CalculatorManagerNumberFormattingUtils_RoundSignificantDigits()