Что касается неверных результатов, я вижу проблему из-за пробелов в цифрах. В соответствии с документацией strtod () эта функция удалит первые пробелы и прекратит чтение, когда найдет пробел в середине цифр, и вернет значение, преобразованное в double. Например,
В случае, указанном ниже, strtod находит пробел после знака минус и минус только не является допустимым числовым значением, поэтому он возвращает 0.0.
dVal = parse("- 123.45", &szStop); // dVal == 0.0 szStop == "- 123.45"
Точно так же в случае строки ниже, когда он находит второе десятичное число, он принимает его как конец значения, потому что два десятичных знака невозможны в числовом значении.
dVal = parse("1.123.45", &szStop); // dVal == 1.123 szStop == ".45"
В случае строки, приведенной ниже, он находит пробел после 1 и останавливает дальнейшую обработку и возвращает 1 как разобранный дубль.
dVal = parse("1 123.45", &szStop); // dVal == 1 szStop == " 123.45"
Случай ниже напоминает первый случай, который я упомянул выше.
dVal = parse("- 1 123,45", &szStop); // dVal == 0 szStop == start of the string
Надеюсь, это поможет.
С уважением,
Azher Iqbal