2011-03-04 101 views
1
main() 
{ 
    double d1 = 1234.1; 
    cout << "d1 = 1234.1 --> " << d1 << endl; 
    double d2 = 1234.099999; 
    cout << "d2 = 1234.099999 --> " << d2 << endl; 
} 

输出:如何保持双的精度在C++

d1 = 1234.1 --> 1234.1 
d2 = 1234.099999 --> 1234.1 

其实我是想打印的d2的精确值,即1234.099999,但没有得到相同的。

请建议我如何得到确切的价值。

+0

你的代码中有东西会丢失吗?没有什么可以让你在那里得到d2。 – murrekatt 2011-03-04 07:43:31

+1

你可能想看看这个线程:http://stackoverflow.com/questions/4217510/how-to-cout-the-correct-number-of-decimal-places-of-a-double-value – Chan 2011-03-04 09:20:40

回答

7

你想cout.precisionhttp://www.cplusplus.com/reference/iostream/ios_base/precision/

还要注意的是D2是不太1234.099999和D1是不太1234.1

浮点数引入舍入误差,这就是为什么他们四舍五入到较少的地方在默认情况下,以尝试显示有意义的结果。

+0

谢谢回复。其实我有要求在字符缓冲区中存储值(1234.099999),但我得到(1234.1)在缓冲区中,这对我造成了问题。我怎样才能在没有四舍五入的情况下回顾确切的价值。 – 2011-03-04 10:21:13

+1

所以你想把它存储为一个字符串而不是双?这可以通过像'std :: string d2 =“1234.099999”;'? – Tim 2011-03-04 15:57:54