2013-09-23 26 views
1

我试图在我的程序中使用long double类型来打印出pi的更多数字。但它只显示5位十进制数字。无法打印pi的更多小数

这是我的代码。

int main(int argc, char** argv) { 

    long double pi_18 = acos(static_cast<long double>(-1)); 
    cout << "pi to 18:" << pi_18 << endl; 

    return 0; 
} 

,这是我的输出:

pi to 18: 3.14159 

我怎样才能解决这个问题?

+1

ACOS()接受双并返回一个double所以即使您在输入和输出转换成长双倍你永远不会超出双精度,因为输入被截断为双精度,输出是双精度值的长双精度的转换,请使用acosl()而不是 – woggio

+1

@ user2318607 - 如果'acos'为'std :: acos' from''它超载,'acos((-1)'返回long double,但函数调用最好写成'aces(1.0L)'。 –

回答

2

像这样:

#include <iomanip> 
#include <iostream> 

std::cout << std::setw(15) << pi_18 << std::endl; 

宽度仅修改影响下一个格式化操作,因此,如果您想格式化多个号码,你拥有的每一个前重复。检查格式说明符the full documentation