我们刚刚迁移到Visual Studio2017,由于change described here的原因,使用std::scientific的双精度值的序列化输出在指数中不再带有2位数字,而是只有1位。
BEOFRE: 5.49000000000000000e+002
NOW : 5.49000000000000000e+02我们使用boost::serialization来序列化成XML。
我们正在考虑切换到boost::multiprecision来处理更大的数字,但是我们仍然必须用指数中的数字来解决这个问题。
有没有办法回到旧的符号'e+002‘,甚至用boost::multiprecision对其进行自定义?
发布于 2018-08-08 20:41:52
阅读相关部分,似乎不使用_TWO_DIGIT_EXPONENT的_set_output_format可能会给出旧的行为?
指数格式%e和%E格式说明符将浮点数格式化为小数尾数和指数。在某些情况下,%g和%G格式说明符也会格式化此表单中的数字。在以前的版本中,CRT将始终生成具有三位数指数的字符串。例如,printf("%e\n",1.0)将打印1.000000e+000。这是不正确的:C要求如果指数只能用一个或两个数字表示,那么只打印两个数字。
在Visual Studio2005中添加了一个全局一致性开关:_set_output_format.程序可以使用参数_TWO_DIGIT_EXPONENT,调用此函数,以启用一致指数打印。默认行为已更改为符合标准的指数打印模式。
https://stackoverflow.com/questions/51732249
复制相似问题