2012-03-07 77 views
-5

我试着去弧度转换为度,但IM没有得到相同的结果,谷歌弧度转换为度,如谷歌

计算器和我定义dosent输出的所有号码的皮。

如果你键入谷歌搜索:(1 * 180)/ 3.14159265那么你得到57.2957796,但我的计划是

输出:57.2958,如果你在谷歌搜索皮键入你:3.14159265,但我

dosent输出的其余部分中,输出:3.14159

我的代码是:

#include <iostream> 
#define SHOW(X) cout << # X " = " << (X) << endl 

using namespace std; 

double Pi_test = 3.14159265; 

float radian_to_degree(double ENTER) { 
    double Pi = 3.14159265; 
    float degrees = (ENTER * 180)/Pi; 
    return degrees; 
} 

int main (int argc, char * const argv[]) { 
    SHOW(radian_to_degree(1)); // 57.2958 not 57.2957795 like google, why? 
    SHOW(Pi_test); // output 3.14159' not 3.14159265, why? 
    return 0; 
} 

请帮我解决这个问题,有什么不对吗?任何例子?

+3

为什么你的函数返回'float'? – Pubby 2012-03-07 02:24:21

+0

我知道最好的单位使用.. – user1104856 2012-03-07 02:25:49

+1

双打浮标的精度“双”。如果你正在编写数学函数,那么使用模板使它们成为通用的。 – Pubby 2012-03-07 02:26:47

回答

1

如前所述here,这可能是因为在cout C++中显示它之前四舍五入你的电话号码。试试这个:

#define SHOW(X) cout << setprecision(some_number) << # X " = " << (X) << endl 
+0

它仍然四舍五入之前显示它... – user1104856 2012-03-07 02:32:57

+0

嗯,我的答案可能是不正确的......我不是恰恰是C专家,哈。其他人为你工作吗? – Jwosty 2012-03-07 02:44:03

8

您需要更改默认精度:

cout.precision(15); 
cout << d << endl; 
+0

并返回一个正如pubby注意到的双。 – 2012-03-07 02:24:56

+0

所发生的一切就是答案四舍五入到一定的小数,J.Ns代码应该修复它 – Dbz 2012-03-07 02:25:13

1

变化radian_to_degreedouble没有float操作,因为double具有更高的精度。

输出使用std::setprecision

#include <iomanip> 
std::cout << std::setprecision(9) << result << "\n"; 
+0

链接帮助我获得一个想法,谢谢! – user1104856 2012-03-07 03:01:35

0

你改变cout的精度甚至之后的结果,注意double只包含如此多的数据;如果你希望你的程序吐出1000个小数位,double不会给你那么多。你必须创建一个你自己的数据类型。

此外,除非必须,否则不要定义宏函数。