C++ 将rational cast提高一倍

C++ 将rational cast提高一倍,c++,boost,rational-number,C++,Boost,Rational Number,使用针对boost 1.62编译的以下代码位: #include <boost/rational.hpp> #include <iostream> int main() { auto val = boost::rational<int64_t>(499999, 2); std::cout << val << std::endl; std::cout << boost::rational_cast&l

使用针对boost 1.62编译的以下代码位:

#include <boost/rational.hpp>
#include <iostream>

int main() {
    auto val = boost::rational<int64_t>(499999, 2);
    std::cout << val << std::endl;
    std::cout << boost::rational_cast<double>(val) << std::endl;
}
我希望rational_cast输出249999.5
有人能解释我做错了什么吗?

修改浮点输入/输出的默认格式:
std::cout似乎连文字
249999.5
都被舍入为
250000
,这对我来说毫无意义。这不是一个提升,但我无法解释为什么如此小的数字被不精确地表示。这个断言(val<250000)有效吗?我之所以这样说,可能是因为您的
std::setprecision()
对于
std::cout
来说不够好。这是有效的:
std::cout@see您转发到的“副本”与此情况不同。assert(v<25000)起作用,意思不是有理数的舍入问题,而是输出类型的舍入问题。这是一个将
std::fixed
添加到
std::cout
@AdvSphere:raises brow的问题:我已经为您重新打开了它,现在,我稍后将重新阅读,这里有一些证据
499999/2
250000