0

我们刚刚迁移到 Visual Studio 2017,由于此处描述的更改,双精度值的序列化输出 usingstd::scientific不再在指数中携带 2 位数字,而只有一位。

 BEOFRE: 5.49000000000000000e+002
 NOW   : 5.49000000000000000e+02

我们boost::serialization用来序列化为 XML。

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

有没有办法回到旧的符号 'e+002' 甚至自定义它boost::multiprecision

4

1 回答 1

0

阅读相关部分,似乎没有 _TWO_DIGIT_EXPONENT 的 _set_output_format 可能会给出旧的行为?

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

在 Visual Studio 2005中添加了一个全局一致性开关:_set_output_format。程序可以使用参数_TWO_DIGIT_EXPONENT调用此函数,以启用符合标准的指数打印。默认行为已更改为符合标准的指数打印模式。

于 2018-08-08T12:41:51.650 回答