2016-10-04 6 views
0

systemGuessを丸める方法はありますか?この場合、systemGuessの結果は5.5です。これを6にするにはどうしたらよいですか?以下このintをどのように丸めますか

を参照してくださいコード:

int main(void){ 

    int systemGuess = 0; 
    stystemGuess = (10 - 1)/2 + 1; 
    printf(" %d ", stystemmGuess); 
} 
+0

正常に丸めたい場合は、stystemGuessに割り当てる前に合計に「.5」を追加します。 – Riley

+1

適用しようとしている丸めルールによって異なります。整数除算のすべての結果を丸めたい、または.5のタイブレークルールを持つ最も近い整数に丸めたいのですか、それとも何ですか? –

答えて

2

使用浮動小数点除算とceilの6を取得する:あなたが0.4を四捨五入したい場合

stystemGuess = ceil((10 - 1)/2.0) + 1; 

代わりにroundを使用してください。

+0

"0.4を丸めたい場合は - >' floor() 'を使います。 'round()'は定義された方法で扱われる最も近いものと丸めを丸めるためのものです。 – chux

+0

@chux「0.5」を上に、「0.4」を下に丸めたいと思った。 – orlp

+0

OK - OPは(0.0 ... 0.5)の範囲の商については少し不明です。 – chux

0

あなたは、問題は、あなたが整数計算を行うことである

systemGuess = (10 - 1)/2.0 + 1 + 0.5; 

を使用することができます。 9/2は4です。9/2.0を使用する場合は浮動小数点の除算があり、4.5が得られます。最後に0.5を追加すると、あなたの代わりに5.5の6.0を与えるので、systemGuessに格納するとき、あなたの代わりに5

+1

ここに誰もがオランダ人ではありません。 – orlp

+0

私はすでにこれを試しました。これは動作しません。 –

+0

申し訳ありませんが、私はそのオランダ語の変数名で質問を見ました。変更しました – jfschaefer

0

整数部がCtruncates toward 0なので、0の反対側で(つまり負の数で)計算すると「丸められます」。あなたは、配当金の量を減算し、その結果に戻ってその半分の量を追加することでこれを行う可能性があります:

int main(void) 
{ 
    int systemGuess = 0; 
    //systemGuess = (10 - 1)/2 + 1; 
    systemGuess = (10 - 1 - 20)/2 + 1 + 10; 
    printf(" %d ", systemGuess); 
} 

は、おそらくあなたの本当のプログラムでこれを実現するために、よりエレガントな方法があります。ここで

0

あなたが行く:

#include <stdio.h> 
#include <stdlib.h> 

int divide(int x, int y); 

int main(void){ 

    int systemGuess = 0; 

    int x = 10-1; 
    int y = 2; 

    systemGuess = divide(x,y) + 1; 

    printf(" %d ", systemGuess); 

} 

int divide(int x, int y) { 
    int a = (x -1)/y +1; 
    return a; 
} 
1

OPは結果切り上げて整数除算を実行しよう。

// If the quotient fraction > 0, return next larger number. 
unsigned udiv_ceiling(unsigned n, unsigned d) { 
    return (n + d - 1)/d; 
} 

// If the quotient fraction >= 0.5, return next larger number. 
unsigned udiv_nearest_ties_up(unsigned n, unsigned d) { 
    return (n + d/2)/d; 
} 

stystemGuess = udiv_ceiling(10 - 1, 2) + 1; 
// or 
stystemGuess = udiv_nearest_ties_up(10 - 1, 2) + 1; 

負の数を処理し、コーナーケースでは、n + d - 1オーバーフローから保護するために必要な追加のコード。

関連する問題