Fixed floating point value parsing in the form "4e2" or "4E2".

This commit is contained in:
Benoit Blanchon
2014-11-08 15:56:40 +01:00
parent 2e47d546b2
commit 1c450fd3aa
3 changed files with 8 additions and 5 deletions

View File

@ -165,9 +165,12 @@ void JsonParser::parseBooleanTo(JsonVariant &destination) {
void JsonParser::parseNumberTo(JsonVariant &destination) {
char *endOfLong;
long longValue = strtol(_ptr, &endOfLong, 10);
char stopChar = *endOfLong;
// Could it be a floating point value?
if (*endOfLong == '.') {
bool couldBeFloat = stopChar == '.' || stopChar == 'e' || stopChar == 'E';
if (couldBeFloat) {
// Yes => parse it as a double
double doubleValue = strtod(_ptr, &_ptr);
// Count the decimal digits

View File

@ -114,12 +114,12 @@ TEST_F(JsonParser_Array_Tests, TwoIntegers) {
}
TEST_F(JsonParser_Array_Tests, TwoDoubles) {
whenInputIs("[4.2,8.4]");
whenInputIs("[4.2,1e2]");
parseMustSucceed();
sizeMustBe(2);
firstElementMustBe(4.2);
secondElementMustBe(8.4);
secondElementMustBe(1e2);
}
TEST_F(JsonParser_Array_Tests, TwoBooleans) {

View File

@ -145,11 +145,11 @@ TEST_F(JsonParser_Object_Test, TwoIntergers) {
}
TEST_F(JsonParser_Object_Test, TwoDoubles) {
whenInputIs("{\"key1\":12.345,\"key2\":-7.89}");
whenInputIs("{\"key1\":12.345,\"key2\":-7E89}");
parseMustSucceed();
sizeMustBe(2);
keyMustHaveValue("key1", 12.345);
keyMustHaveValue("key2", -7.89);
keyMustHaveValue("key2", -7E89);
}
TEST_F(JsonParser_Object_Test, TwoBooleans) {