• 締切済み

四捨五入をするプログラムの書き方を教えてください

円を入力して、ドルに直し、そのドルを少数点以下2桁で表すために、四捨五入をするプログラムを書きたいです。ただ、まだ授業で、printf, scanf, if文, switch文までしかやってないので、これらを使用してプログラムを書くやりかたを考えています。 四捨五入せずに、切り捨てるプログラムは下のように書いてみました。 よろしくお願いします。 #include <stdio.h> main() { double Y,D; printf("金額(円)を入力せよ:",Y); scanf("%lf",&Y); D=Y/101.48; printf("米ドルでは、%.2lfドルです。\n",D); }

みんなの回答

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.4

ご存知の通り、浮動小数点数の小数点以下は正確に表せない場合が多いです。 ですから浮動小数点数のまま四捨五入するのではなく、 D=Y/101.48; で浮動小数点数におけるドルの値を求めたのち、 I=D ;/* Iの型はint */ D-=I ; で整数部分と小数点以下に分離して、 printf ("%d.%d\n", I, (int)(D*100.0+0.5)) ; としたらいかがでしょうか?

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

D=double((int(Y*1000.0/101.48)+5)/10)/100.0; これでどう? 頭の中で考えただけだから検証してね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

四捨五入にはround関数を使います。 小数第3位で四捨五入するには... D = round(D * 100.0) / 100.0; でよいのではないでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

切り捨てと四捨五入との関係を考えてみよう.

関連するQ&A

  • 負の数の四捨五入の方法

    はじめまして。大学で週一でC言語を習っている全くの初心者です。 過去ログを確認したのですがなかったようなので質問させていただきます。 タイトルの通りなのですが「入力される実数が負の数の場合」に四捨五入するプログラムを作れ!とのことなんですが・・・。 正の数の四捨五入のプログラムは作りましたが、逆がわかりません。 ------------------------------------------------------------- //入力された正の実数を四捨五入して整数にするプログラム #include <stdio.h> int main(void) { int seisu; double jissu; printf("実数="); scanf("%lf" ,&jissu); seisu =jissu + 0.5; printf(" %lf の四捨五入は %d です。\n",jissu,seisu ); } ------------------------------------------------------------ ちょこっと変えればいいのかなぁ・・・とは思うのですが・・・。 ご教授お願いします。 ちなみにOSはXP、使っているコンパイラはbcc32というやつです。

  • 書いたプログラムの間違いを教えてください

    こんにちは。 C言語を学習し始めた者です。 入力した円をユーロとドルに替えるというプログラムで、下のように書きました。 しかし、実行結果が、何円でも、0.00ドル、0.00ユーロになってしまいます。 間違いを教えてください #include <stdio.h> main() { double Y,E,D; E=Y/132.12; D=Y/101.48; printf("金額(円)を入力せよ:",Y); scanf("%lf",&Y); printf("%lf円は%.2lfユーロになります。\n",Y,E); printf("米ドルでは、%.2lfドルです。\n",D); }

  • プログラムの作成

    Cで、キ-ボ-ドから整数を1個(mとする)、実数を1個(xとする)それぞれ入力し、 S=Σ(n=0からmまで)1/2n+1×(x-1/x+1)^2n+1 の値を求めるプログラムを作ってみたのですが、あってるかどうかわかりますか? #include<stdio.h> #include<math.h> main() { double y=0; int i,m,x; printf(\" Input m: \") scanf(\"%lf\", &m); printf(\" Input x: \") scanf(\"%lf\", &x); for(i=0; i <= m; i++) { y += 1/(2*i+1)*pow((x-1)/(x+1),2*i+1) } printf(\" S = %d\n\", y) }

  • 平均を求めるプログラムを作ったのですが答えが0.0

    としか出ません。 #include<stdio.h> void main (void) {   double a; double b;   double c; printf("Aを入力する"); scanf("%lf",&a); printf("Bを入力する"); scanf("%lf",&b); c=(2*a*b)/(a+b); printf("平均値は"); printf("%8.6lf",c); } というプログラムを作ったのですが、プログラムはコンパイルするのですが出てくる答えは0.000000しか出ません。ほかにもよく0.0000という答えが出ることがあります。原因を教えていただけませんでしょうか。 

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }

  • for文を使ったプログラムで困っています

    for文を使って、10000からある数xを何回引けるか?またその残りを求めるプログラム(例:10000から3000は3回引くことができ、残りは1000である。)を作りたいのですが、引く回数が1多くなってしまいます。どこがいけないかわからないので困っています。よろしくおねがいします。 #include<stdio.h> void main() { int x; int Sa = 10000; int y; printf("10000以下の数を入力してください:"); scanf("%d",&x); for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } printf("10000から%d回引くことができます。\n",y); printf("残りは%dです。",Sa); }

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • 四捨五入について

    技術評論社より出版の、「C言語による最新アルゴリズム事典」(奥村晴彦著)の「四捨五入」の項目について質問です。 「a >= 0, b > 0の2整数について、a / bを四捨五入で小数第一位までに丸める方法」が以下のように書かれています。 整数型変数rを使って、 r = (10 * a + b / 2) / b; printf("a / b = %d.%d\n", r / 10, r % 10); rには、結果の小数a.bが10 * a + bの形に入ることになるのでしょうが、何故そうなるのかわかりません。 どうかご教授ください。m(__)m

  • 結果の表示

    よろしくお願いします。 プログラミングの勉強をしています。 座標上にx1、x2、y1、y2をとり、この2点間の距離が表示されるプログラムを作っています。 最終的には自分で座標を入力し、以下のように表示されることが目標です。 x1:0 y1:0 x2:1 y2:1 この2点間の距離は1.414214です。 次のように作ってみましたが、1.414・・・となるところが、0.0000・・・となってしまいます。どこを直したらよいでしょうか、お願いいたします。 #include <stdio.h> #include <math.h> main() { int x1 = 0, y1 = 0, x2 = 0, y2 = 0; double A = 0.0, dx = 0.0, dy = 0.0; A = sqrt(dx * dx + dy * dy); dx = x1-x2; dy = y1-y2; printf("x1:"); scanf("%d",&x1); printf("y1:"); scanf("%d",&y1); printf("x2:"); scanf("%d",&x2); printf("y2:"); scanf("%d",&y2); printf("この2点間の距離は%lfです\n", A); }

  • C言語のプログラムでうまく動きません。

    xとyを入力してその商を求めよという問題なのですが、大きい数字を小さい数字で割るようになっています。また、当然分母が0の時には不定となるので、次のようなプログラムを作りましたが、うまく動きません。どこが悪いか考えてもわかりませんでした。教えていただけませんでしょうか。 #include<stdio.h> main() { int x; int y; double syou; printf("xを入力せよ"); scanf("%d",&x); printf("yを入力せよ"); scanf("%d",&y); syou=x/y; if("syou>=1") { if("y==0") { printf("不定です"); } printf("答えは%fです。",&syou); } else { if("x==0") { printf("不定です"); } syou=y/x; printf("答えは%fです。",&syou); } } これでx、yを入力しても不定と出てきて、xの方が大きいときには見当はずれの大きな数字が出てきます。逆にyの方が大きいと同じく不定と出てきて答えは0.000と表示します。

専門家に質問してみよう