2012-03-07 90 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不會給你那麼多。你必須創建一個你自己的數據類型。

此外,除非必須,否則不要定義宏函數。