这些差异存在于返回的值中,我相信这个输入是围绕着破解的,比如这个代码: int main() { std::cout.precision(100); double input = std::nextafter(0.05, 0.0) / 0.1; double x1 = floor(0.5 + input); double x2 = round(input); std::cout << x1 << std::endl; std::cout << x2 << std::endl; } 其输出: 1 0 但最终它们只是不同的结果,我们选择它的首选。我看到很多“旧”C / C ++程序使用floor(0.5 + input)而不是round(input)。 有没有历史原因?最便宜的CPU? 答案 std::round在C ++ 11中引入。在此之前,只有std::floor程序员才能使用它。 没有任何历史原因。这种偏差从今年开始就已经出现。当他们感觉非常非常调皮时,他们会这样做。这是对浮点运算的严重滥用,许多经验丰富的专业程序员都为此付出代价。即使是Java bods也能达到1.7版本。有趣的家伙。 我的猜测是,直到C ++ 11(尽管C在C99中获得它们)之前,一种体面的开箱即用的德语舍入函数还没有正式可用,但这实际上不适用于采用所谓的替代方法。 这是事情: floor(0.5 + input)并不总是恢复与相应的std::round调用相同的结果!