mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-17 12:32:17 +02:00
Fixed floating point value parsing in the form "4e2" or "4E2".
This commit is contained in:
@ -165,9 +165,12 @@ void JsonParser::parseBooleanTo(JsonVariant &destination) {
|
|||||||
void JsonParser::parseNumberTo(JsonVariant &destination) {
|
void JsonParser::parseNumberTo(JsonVariant &destination) {
|
||||||
char *endOfLong;
|
char *endOfLong;
|
||||||
long longValue = strtol(_ptr, &endOfLong, 10);
|
long longValue = strtol(_ptr, &endOfLong, 10);
|
||||||
|
char stopChar = *endOfLong;
|
||||||
|
|
||||||
// Could it be a floating point value?
|
// Could it be a floating point value?
|
||||||
if (*endOfLong == '.') {
|
bool couldBeFloat = stopChar == '.' || stopChar == 'e' || stopChar == 'E';
|
||||||
|
|
||||||
|
if (couldBeFloat) {
|
||||||
// Yes => parse it as a double
|
// Yes => parse it as a double
|
||||||
double doubleValue = strtod(_ptr, &_ptr);
|
double doubleValue = strtod(_ptr, &_ptr);
|
||||||
// Count the decimal digits
|
// Count the decimal digits
|
||||||
|
@ -114,12 +114,12 @@ TEST_F(JsonParser_Array_Tests, TwoIntegers) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonParser_Array_Tests, TwoDoubles) {
|
TEST_F(JsonParser_Array_Tests, TwoDoubles) {
|
||||||
whenInputIs("[4.2,8.4]");
|
whenInputIs("[4.2,1e2]");
|
||||||
|
|
||||||
parseMustSucceed();
|
parseMustSucceed();
|
||||||
sizeMustBe(2);
|
sizeMustBe(2);
|
||||||
firstElementMustBe(4.2);
|
firstElementMustBe(4.2);
|
||||||
secondElementMustBe(8.4);
|
secondElementMustBe(1e2);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonParser_Array_Tests, TwoBooleans) {
|
TEST_F(JsonParser_Array_Tests, TwoBooleans) {
|
||||||
|
@ -145,11 +145,11 @@ TEST_F(JsonParser_Object_Test, TwoIntergers) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonParser_Object_Test, TwoDoubles) {
|
TEST_F(JsonParser_Object_Test, TwoDoubles) {
|
||||||
whenInputIs("{\"key1\":12.345,\"key2\":-7.89}");
|
whenInputIs("{\"key1\":12.345,\"key2\":-7E89}");
|
||||||
parseMustSucceed();
|
parseMustSucceed();
|
||||||
sizeMustBe(2);
|
sizeMustBe(2);
|
||||||
keyMustHaveValue("key1", 12.345);
|
keyMustHaveValue("key1", 12.345);
|
||||||
keyMustHaveValue("key2", -7.89);
|
keyMustHaveValue("key2", -7E89);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonParser_Object_Test, TwoBooleans) {
|
TEST_F(JsonParser_Object_Test, TwoBooleans) {
|
||||||
|
Reference in New Issue
Block a user