Мы только что перешли на Visual Studio 2017 и из-за изменение описано здесь сериализованный вывод двойного значения с использованием std::scientific
больше не несет 2 цифры в показателе степени, а только одну.
BEOFRE: 5.49000000000000000e+002
NOW : 5.49000000000000000e+02
Мы используем boost::serialization
сериализовать в XML.
Мы думали перейти на boost::multiprecision
для обработки большего числа, но все же мы должны исправить эту проблему с помощью цифр в показателе степени.
Есть ли способ вернуться к старому обозначению ‘e + 002’ или даже настроить его с помощью boost::multiprecision
?
Читая соответствующий раздел, кажется, что _set_output_format с не _TWO_DIGIT_EXPONENT может дать старое поведение?
Форматирование экспонентов Спецификаторы формата% e и% E форматируют число с плавающей запятой как десятичную мантиссу и экспоненту. Спецификаторы формата% g и% G в некоторых случаях также форматируют числа в этой форме. В предыдущих версиях CRT всегда генерировал строки с трехзначными показателями. Например, printf («% e \ n», 1.0) будет печатать 1.000000e + 000. Это было неверно: C требует, чтобы, если показатель степени представлен только одной или двумя цифрами, то печатались только две цифры.
В Visual Studio 2005 глобальный переключатель соответствия был добавлен: _set_output_format. Программа может вызвать эту функцию с аргументом _TWO_DIGIT_EXPONENT, включить соответствующую экспоненциальную печать. дефолт поведение изменено на режим печати экспоненты в соответствии со стандартами.
Других решений пока нет …