Fix a bug in dtoa
This previously affects Writer:: SetMaxDecimalPlaces()
This commit is contained in:
parent
824120b8d8
commit
7886965e34
@ -180,7 +180,7 @@ inline char* Prettify(char* buffer, int length, int k, int maxDecimalPlaces) {
|
|||||||
buffer[1] = '.';
|
buffer[1] = '.';
|
||||||
for (int i = 2; i < offset; i++)
|
for (int i = 2; i < offset; i++)
|
||||||
buffer[i] = '0';
|
buffer[i] = '0';
|
||||||
if (length + offset > maxDecimalPlaces) {
|
if (length - kk > maxDecimalPlaces) {
|
||||||
// When maxDecimalPlaces = 2, 0.123 -> 0.12, 0.102 -> 0.1
|
// When maxDecimalPlaces = 2, 0.123 -> 0.12, 0.102 -> 0.1
|
||||||
// Remove extra trailing zeros (at least one) after truncation.
|
// Remove extra trailing zeros (at least one) after truncation.
|
||||||
for (int i = maxDecimalPlaces + 1; i > 2; i--)
|
for (int i = maxDecimalPlaces + 1; i > 2; i--)
|
||||||
|
@ -81,6 +81,12 @@ TEST(dtoa, maxDecimalPlaces) {
|
|||||||
TEST_DTOA(3, 2.225073858507201e-308, "0.0"); // Max subnormal positive double
|
TEST_DTOA(3, 2.225073858507201e-308, "0.0"); // Max subnormal positive double
|
||||||
TEST_DTOA(3, 2.2250738585072014e-308, "0.0"); // Min normal positive double
|
TEST_DTOA(3, 2.2250738585072014e-308, "0.0"); // Min normal positive double
|
||||||
TEST_DTOA(3, 1.7976931348623157e308, "1.7976931348623157e308"); // Max double
|
TEST_DTOA(3, 1.7976931348623157e308, "1.7976931348623157e308"); // Max double
|
||||||
|
TEST_DTOA(5, -0.14000000000000001, "-0.14");
|
||||||
|
TEST_DTOA(4, -0.14000000000000001, "-0.14");
|
||||||
|
TEST_DTOA(3, -0.14000000000000001, "-0.14");
|
||||||
|
TEST_DTOA(3, -0.10000000000000001, "-0.1");
|
||||||
|
TEST_DTOA(2, -0.10000000000000001, "-0.1");
|
||||||
|
TEST_DTOA(1, -0.10000000000000001, "-0.1");
|
||||||
|
|
||||||
#undef TEST_DTOA
|
#undef TEST_DTOA
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user