C++ 在boost multiprecision中自定义指数中的位数

C++ 在boost multiprecision中自定义指数中的位数,c++,boost-serialization,boost-multiprecision,C++,Boost Serialization,Boost Multiprecision,我们刚刚迁移到Visual Studio 2017,由于使用std::scientific的双值序列化输出在指数中不再包含两位数字,而只包含一位 BEOFRE: 5.49000000000000000e+002 NOW : 5.49000000000000000e+02 我们使用boost::serialization来序列化为XML 我们正考虑切换到boost::multiprecision来处理更大的数字,但我们仍然必须用指数中的数字来解决这个问题 有没有办法回到旧的符号“e+00

我们刚刚迁移到Visual Studio 2017,由于使用
std::scientific
的双值序列化输出在指数中不再包含两位数字,而只包含一位

 BEOFRE: 5.49000000000000000e+002
 NOW   : 5.49000000000000000e+02
我们使用
boost::serialization
来序列化为XML

我们正考虑切换到
boost::multiprecision
来处理更大的数字,但我们仍然必须用指数中的数字来解决这个问题


有没有办法回到旧的符号“e+002”,或者甚至用
boost::multiprecision
对其进行定制?

阅读相关章节,似乎非两位数指数的“set\u output\u”格式可能会给出旧的行为

指数格式化%e和%e格式说明符将浮点数格式化为十进制尾数和指数。在某些情况下,%g和%g格式说明符也会以此形式格式化数字。在以前的版本中,CRT总是生成具有三位指数的字符串。例如,printf(“%e\n”,1.0)将打印1.000000e+000。这是不正确的:C要求如果指数只能用一个或两个数字表示,那么只能打印两个数字

在VisualStudio2005中,添加了一个全局一致性开关:\u设置\u输出\u格式。程序可以使用参数\u两位数指数调用此函数,以启用一致性指数打印。默认行为已更改为标准一致性指数打印模式


引用:“C要求,如果指数只能用一个或两个数字表示,则只能打印两个数字。”-指数中的数字数量因数字大小而异。也许你试图从错误的方面解决问题。需要2位数字的原因是什么?当指数较大时,e+20(2^70)或e+200(2^700)会发生什么情况?我想它能正常工作吗?您的xml真的在乎吗,或者您是在试图保留您的回归测试用例吗?您能提供一个最小的工作示例吗?对于大的数字,可以很好地工作。我只是想找到一个简单的方法来继续支持用e+0020输出双打的老方法,你说的是对的。我读到了相同的内容。问题是,我在Visual Studio 2017的任何地方都找不到设置输出格式或两位数指数……尽管给出了名称,但似乎该函数是为了将fom e+003转换为+002而设置的。。我需要的可能是过去的行为。