【发布时间】:2021-01-24 03:24:36
【问题描述】:
我目前正在将一些代码从 Windows 移植到 Linux (Ubuntu),从 MS VS2008 编译器移植到 GCC。
问题是下面的代码有不同的结果:
double d = 19.53125;
std::cout.precision(4);
std::cout.setf(std::ios::fixed);
std::cout << d << std::endl;
Windows output: 19.5313
Linux output: 19.5312
如果我将精度设置为 5,则输出是相同的。
我预计 19.53125 将四舍五入为 19.5313。
有什么建议可以让我获得所需的舍入行为吗?
注意:Windows 代码在 Windows 10 笔记本电脑上本地运行,而 Linux 代码在 64 位 Ubuntu 18.04 LTS 虚拟机中运行。
【问题讨论】:
-
“我怎样才能获得所需的舍入行为?” --> 你还没有说明首选哪个输出。
-
我希望 0.5 是向上取整而不是向下取整。
-
我怀疑舍入例程使用区域设置。当 Windows 从当前环境中检索本地时,Linux 是否使用“C”本地?注意:只是猜测。
-
我怀疑这回答了这个问题:stackoverflow.com/q/24120888/14065 基本上 C++ stackoverflow.com/a/24120966/14065 说它的实现定义了如何四舍五入和引用标准。
标签: c++ gcc visual-c++ double rounding-error