2012-01-27 100 views
5

我有浮点数精度的一个问题:输出到流浮点数精确

int main(void) { 
    double b = 106.829599; 
    float a = b; 
    std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl; 
    std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl; 
} 

结果是:

一个= 106.83; b = 106.83

a = 106.8296; B = 106.8296

所以,我的问题是,为什么在第一行数字是如此之短(我期待看到106.829)

GCC 4.1.2,也是我在LWS

回答

8

做了一个试验实际上,106.829599四舍五入为6位(小数点后三位)为106.830,显示为106.83,因为给予setprecision的6位数精度仅为最大值。

小数精度决定的位数的最大数为写在插入操作 表达浮点值。

您可能正在寻找的是将setprecision与fixed相结合。