Изменено двойное округление snprintf в VS2015 по сравнению с VS2010

Я пытаюсь перенести старый проект из Visual Studio 2010 в Visual Studio 2015. Проблема в том, что snprintf (используемый с форматом "%.15g") удваивается иначе, чем в Visual Studio 2010.

Есть две проблемы:

  1. Электронная нотация изменена, например, с 12345e005 на 12345e05

  2. Двойные значения, такие как 105.52361792790150, теперь преобразуются в "105.523617927901" вместо "105.523617927902".

Я нашел причину "пропущенной" нулевой цифры:

Microsoft намеренно изменила его, чтобы сделать его более совместимым со стандартами: https://blogs.msdn.microsoft.com/vcblog/2014/06/18/c-runtime-crt-features-fixes-and-breaking-changes-in-visual-studio-14-ctp1/(см. "Форматирование экспоненты")

Я реализовал решение, чтобы добавить отсутствующую нулевую цифру, но я не могу найти решение для другого поведения округления.

Есть ли способ изменить поведение округления на "старый стиль"? Я пробовал std::fesetround, но, похоже, он не влияет на округление snprintf.

0 ответов

Другие вопросы по тегам