Skip to content

Commit 8234196

Browse files
committed
Fix negative zero string conversion
1 parent d9e0e11 commit 8234196

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/scratch/value_functions_p.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ extern "C"
5050
return v < 0 && std::isinf(v);
5151
}
5252

53-
inline long value_convert_int_str(const char *str, int n, bool *ok)
53+
inline double value_convert_int_str(const char *str, int n, bool *ok)
5454
{
5555
if (ok)
5656
*ok = false;
@@ -80,7 +80,7 @@ extern "C"
8080
*ok = true;
8181

8282
if (isNegative)
83-
return -ret;
83+
return -static_cast<double>(ret); // for negative zero
8484
else
8585
return ret;
8686
}

test/scratch_classes/value_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,15 @@ TEST(ValueTest, ToDouble)
938938
v = "-0.15";
939939
ASSERT_EQ(v.toDouble(), -0.15);
940940

941+
v = "0";
942+
ASSERT_EQ(v.toDouble(), 0.0);
943+
v = "-0";
944+
ASSERT_EQ(v.toDouble(), -0.0);
945+
v = "0.0";
946+
ASSERT_EQ(v.toDouble(), 0.0);
947+
v = "-0.0";
948+
ASSERT_EQ(v.toDouble(), -0.0);
949+
941950
v = "+.15";
942951
ASSERT_EQ(v.toDouble(), 0.15);
943952
v = ".15";
@@ -2879,6 +2888,11 @@ TEST(ValueTest, StringToDouble)
28792888
ASSERT_EQ(value_stringToDouble("0.15"), 0.15);
28802889
ASSERT_EQ(value_stringToDouble("-0.15"), -0.15);
28812890

2891+
ASSERT_EQ(value_stringToDouble("0"), 0.0);
2892+
ASSERT_EQ(value_stringToDouble("-0"), -0.0);
2893+
ASSERT_EQ(value_stringToDouble("0.0"), 0.0);
2894+
ASSERT_EQ(value_stringToDouble("-0.0"), -0.0);
2895+
28822896
ASSERT_EQ(value_stringToDouble("+.15"), 0.15);
28832897
ASSERT_EQ(value_stringToDouble(".15"), 0.15);
28842898
ASSERT_EQ(value_stringToDouble("-.15"), -0.15);

0 commit comments

Comments
 (0)