Skip to content

Commit ef4f852

Browse files
committed
More fixes
1 parent 942dccb commit ef4f852

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

modules/yup_core/text/yup_String.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,11 +1193,10 @@ class YUP_API String final
11931193
return "0";
11941194
}
11951195

1196-
auto numDigitsBeforePoint = (int) std::ceil (std::log10 (number < 0 ? -number : number));
1197-
1198-
auto shift = numberOfSignificantFigures - numDigitsBeforePoint;
1199-
auto factor = std::pow (10.0, shift);
1200-
auto rounded = std::round (number * factor) / factor;
1196+
const auto numDigitsBeforePoint = (int) std::floor (std::log10 (std::abs (number)) + DecimalType (1));
1197+
const auto shift = numberOfSignificantFigures - numDigitsBeforePoint;
1198+
const auto factor = std::pow (10.0, shift);
1199+
const auto rounded = std::round (number * factor) / factor;
12011200

12021201
std::stringstream ss;
12031202
ss << std::fixed << std::setprecision (std::max (shift, 0)) << rounded;

tests/yup_core/yup_String.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,18 @@ TEST_F (StringTests, SignificantFigures)
571571
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (2.8647, 6), String ("2.86470"));
572572

573573
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (-0.0000000000019, 1), String ("-0.000000000002"));
574+
575+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (0.001, 7), String ("0.001000000"));
576+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (0.01, 7), String ("0.01000000"));
577+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (0.1, 7), String ("0.1000000"));
578+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (1, 7), String ("1.000000"));
579+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (10, 7), String ("10.00000"));
580+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (100, 7), String ("100.0000"));
581+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (1000, 7), String ("1000.000"));
582+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (10000, 7), String ("10000.00"));
583+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (100000, 7), String ("100000.0"));
584+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (1000000, 7), String ("1000000"));
585+
EXPECT_EQ (String::toDecimalStringWithSignificantFigures (10000000, 7), String ("10000000"));
574586
}
575587

576588
TEST_F (StringTests, FloatTrimming)

0 commit comments

Comments
 (0)