2016-04-23 9 views
4

私はスタックオーバーフローを新規にプログラミングしています。私はC++のプログラミングのためのいくつかのクラスに入っており、私は少しの問題を抱えています。このプログラムは華氏を取り、それを摂氏に変換することになっています。私は他のプログラムを見たことがありますが、私の特定の問題と重複するものは見つかりませんでした。これは私のコードです。C++の数値が正しく丸められません

#include <iostream> 
using namespace std; 

int main() 
{ 
    int fahrenheit; 
    cout << "Please enter Fahrenheit degrees: "; 
    cin >> fahrenheit; 
    int celsius = 5.0/9 * (fahrenheit - 32.0); 
    cout << "Celsius: " << celsius << endl; 

    return 0; 
} 

これは、実行されている5つのテストのうちの4つでうまく機能しています。それは22.22〜22と4.44〜4を四捨五入しますが、0Fを入れると、-18の代わりに-17.77〜-17を丸めます。私は約1時間研究していて、助けが大好きです!ありがとうございました。

+0

'-17> -18' .... –

+0

C++は常に切り捨てられますか?もしそうなら、どうすれば-18に丸めることができますか?私が実行しているテストは、それが失敗する唯一のテストです。それは、プログラムが-18と言うことを期待していますが、私は-17と言っています。 –

+2

floatまたはdoubleを変換すると、**デフォルトで**が切り詰められます。 **丸め**するには、それを行うライブラリ関数を使用します(Googleはそれを使用します)。 – Majora320

答えて

2

整数型へのキャストと同様に、整数は暗黙のうちに切り捨てられます。

ほとんどの場合、intの代わりにfloatを使用すると、ほとんどのまともな結果与える:ノーマルに見える出力(「14.25」のような固定小数点ではなく、電子表記と科学)を取得するには

#include <iostream> 
using namespace std; 

int main() 
{ 
    int fahrenheit; 
    cout << "Please enter Fahrenheit degrees: "; 
    cin >> fahrenheit; 
    float celsius = 5.0/9 * (fahrenheit - 32.0); 
    cout << "Celsius: " << celsius << endl; 

    return 0; 
} 

を浮動小数点を印刷する前に、std::fixedを渡してください。 cout.precision()を使用して、出力に希望する桁数を設定することもできます。他のいくつかの理由のためにあなたがintが必要な場合は


、式の右手の周りstd::round()を使用しています。

+0

'float'ではなく' double'を使います。 – Majora320

+0

@ Majora320フロートは、彼がやっていることにはほぼ確実に十分でしょう。いずれかの選択肢は、実際には文脈上のものです。 –

+0

私はそれを前に試してみましたが、すべての答えに小数点が表示され、丸めが必要です。私はcout.precision(0)を使ってみましたが、私の答えはe +答えに変わりました。 –

5

doubleからintへの暗黙的な変換に頼るのではなく、std::round()を使用してください。どちらの場合も、まったく変換を使用しない場合は、温度をdoubleとして表示します。

EDIT:他の人がすでに指摘したよう、暗黙の型変換がないラウンドしかしTRUNCATE代わりに番号(単に小数点以下のすべてをカットオフ)します。

2

コンパイラが浮動小数点数を整数に変換するとき、それは丸められません。を切り捨てます。私。それは単に小数点以下の桁を切り落とします。したがって、プログラムはプログラムされたとおりに動作します。 static_cast<int>がintにfloatを-ingとき

0
int x = 3.99; 
int y = std::round(3.99); 
std::cout 
    << "x = " << x << std::endl 
    << "y = " << y << std::endl 
    ; 

--> 
x = 3 
y = 4 

C/C++は、浮動小数点のラウンドを行っていません。丸めたい場合は、ライブラリ関数を呼び出す必要があります。std::round()

関連する問題