2017-01-18 6 views
2

Cのプログラミングを始めたばかりですが、私はJavaで背景知識を持っていますが、私はこのプログラミング言語に移行しようとしています。 1.3333のようなものから小数点以下2桁までユーザーの入力を丸めなければならないプロジェクトがあります。Cプログラミングユーザの入力を丸める

#include <stdio.h> 
int main (void) 
{ 
    //v is my variable for the value which the user will input 
    //Declaring variable as floating 
    float v; 

    printf("Enter your value: \n"); 
    scanf("%.2f", &v); 
    v = 0; 

    printf("The rounded version is: %.2f"); 

    return 0; 
} 

これは私がこれまでのところ、私は私の本で読んだのオフに基づいたものであり、このリンク:私の質問は、それ理由は異なっているRounding Number to 2 Decimal Places in C

は、私がこれまで持っていることはこれですユーザーの入力が必要です。私の教授は、私はライブラリ関数を使うことができず、それを計算するために単純な型キャストを使う必要があると言っています。これは、私が持っているものが間違っているかもしれないと感じさせます。 #include <stdio.h>はライブラリ関数と見なされますか?この情報があれば、私の思考プロセスは適切な軌道にあるのでしょうか?もしそうでなければ、私は100で変数で割るような何かをするでしょうか?おそらく科学記法の%eですか?

ありがとうございます!特定の情報のみを要求し、コーディングまたは何も要求しない。本当に "うそ"と "うそ"を理解したい。

+0

'scanf'は、ライブラリ関数です。しかし、あなたのprofが「シンプルな型キャストを使う」ことによって何を意味するのかは分かりません。タイプキャスティングはこれを解決する正しい方法のようには見えません。少なくとも、独自の型キャストだけではありません。基本的な数学操作を使用するあなたの考えは、より軌道に乗っているようです。 – kaylum

+3

'scanf("%.2f "、&v);'はフォーマットエラーです。 'scanf("%f "、&v);'を使って、2桁の位置に丸めたようにしてください。小数点以下の桁数は –

+0

@Chimeraそうではありません。私はそのリンクを深く見て、私の質問に対する答えは見つけられませんでした。 –

答えて

2

最初に#includeは、例えば、scanfのライブラリをインクルードする必要がある関数をインクルードして使用するために必要なコマンドです。

あなたが書くことができscanf%.2fを使用せずに2つの小数点以下の数字を丸める:

int x= (v*1000); 
if(x%10>6) x=x/10+1 ; 
else x= x/10; 
printf("%d.%d",x/100,x%100); 
+0

しかし、私はライブラリ関数を使うことができないので、scanfのようなものを使うことができないのですか? –

+2

あなたは他を読むことができません....あなたの教授が意味するのは、図書館なしで丸められた数字を計算することです。 – coder

1

私はあなたの教授がいないので、多くのユーザの入力にではなく、基本的なデータ型を変換するときに何が起こるかを理解する上で目指していと思います。次のように丸め、または少なくともライブラリ機能せず、数字を切断することになります:

int main (void) 
{ 
    //v is my variable for the value which the user will input 
    //Declaring variable as floating 
    float v; 

    printf("Enter your value: \n"); 
    scanf("%f", &v); 
    v = float((int)(v*100))/100; 

    printf("The rounded version is: %f", v); 

    return 0; 
} 

入力/出力:

Enter your value: 
1.3333333 
The rounded version is: 1.330000 
+0

数式を使用しますが、どこでintを取得しましたか?私は1つの変数しか持っていませんし、それはVです。小数点を持つので、Vは整数ではありません。 –

+0

これは間違っています。まず、13.334の場合は、13.33が四捨五入されていません。それは浮動小数点数なので、さらに数字を表示します。たとえば、13.3300000 – coder

+0

の場合は、intの代わりにlongを使うべきでしょう。ユーザーが9e19と入力すると、間違った答えが返されます。 – Jasen

1

ここでは、以外の任意のライブラリ呼び出しを使用せずに適切に丸め実施例でありますstdio。

#include <stdio.h> 

int main (void) 
{ 
    float v; 

    printf("Enter your value: \n"); 
    scanf("%f", &v); 


    v = (float)((int)(v * 100 + .5)/100.0); 

    printf("The rounded version is: %f\n",v); 

    return 0; 
} 

出力:

[email protected] ~ $ ./a.out 
Enter your value: 
3.456 
The rounded version is: 3.460000 
+0

この例をありがとう。非常に役に立ちます。私が理解していることから、Javaのものであるため、 "%.2f"のようなことはできません。だから私は小数点の桁が正しいことを確認するために乗算を使用する必要があります。まだ浮動小数点を整数で乗算する理由は不明です。 –

+0

@ J.Nav最初に3.456を346に変え、100.0で割ってフロートに戻します。 – Chimera