• ベストアンサー

負の数の四捨五入の方法

SHOO-3の回答

  • ベストアンサー
  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.6

小学生で教わる形式なら、 seisu =jissu + 0.5; でOKです。数直線上で考えれば負数だったとしても四捨五入はいつもこうなります。そのままのプログラムで問題ありません。 (-1.3なら-1に、-2.5なら-2に、-0.5なら0に丸めます。真ん中の場合は必ず大きいほうに丸められます。) ただし、JISやISOなんかでは、定義が変わります。 ちなみに、JISやISOの定義だと (1) 一番近い丸め結果候補が1つだけなら,その数に丸める, (2) 一番近い丸め結果候補が2つある場合は,末尾が偶数のものに丸める, (3) 丸め処理は1段階で行なわなければならない. (引用: http://www.okada.jp.org/RWiki/index.php?JIS%2CISO%BC%B0%BB%CD%BC%CE%B8%DE%C6%FE ) となっています。 また、特殊な例としては、負数の場合は小さいほうに丸めるという方法をとる場合もあります。 if(jissu < 0){/*負数の場合*/   seisu =jissu - 0.5; }else{/*正数の場合*/   seisu =jissu + 0.5; } これがその丸め方になると思います。(これは四捨五入と呼べるか怪しいので、参考にしないほうが良いと思います) 極めて細かいところまで精度を求めるようなものでない限り、小学生方式の四捨五入で問題ないと思います。 >決まった教場でしかプログラムが実行できないために確かめようがない bcc32はBorlandからフリーでダウンロードできるコンパイラです。あなたでも環境を整えることはできると思われますので、やろうと思えば確かめることはできるはずですよ。↓ http://www.borland.com/jp/products/cbuilder/freecompiler.html ぜひ試してみると良いと思います。

namiuti2
質問者

お礼

回答ありがとうございます。 昨日提出だったのですが結局 seisu =jissu - 0.5; にしてしまいました。 seisu =jissu + 0.5;の場合に-1.1の四捨五入が0になってしまうというものの解決方法がわからなかったので・・・。 実はBorlandのコンパイラは入れてみたのですが簡単には動いてくれなかったので大学でなんとかやってみました。 if文を使って作ってくださったものは今後他の方の参考になると思います。 コンパイラの紹介等含め、親切な回答をありがとうございます!

関連するQ&A

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

    円を入力して、ドルに直し、そのドルを少数点以下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); }

  • 四捨五入

    実数Xの小数点以下2桁目を四捨五入して実数Hとするプログラムと Xの10の位を四捨五入して整数Lとするプログラム(Xは正の整数) を教えてください。

    • ベストアンサー
    • Java
  • プログラミング 実数 合計

    3つの実数を読み込んで合計を表示するというプログラムなんですが、プログラムをコンパイルして3つの実数を入力してくださいと表示させて実数1に1.5、実数2に0.8、実数3に1.0, 合計は3.3です表示させたいのですが #include <stdio.h> int main(void) { double n1,n2,n3; puts("3つの実数を入力してください。"); printf("実数:"); scanf("%lf", &n1); printf("実数:"); scanf("%lf", &n2); printf("実数:"); scanf("%lf", &n3); printf("合計は%5.lfです。\n",(double)(n1 + n2 + n3)); return (0); } でコンパイルしようとすると1つしか実数を入力する所が出てこなくて 数字を入れると合計は.lfですと出てきて実行できないのですが、上のソースのどこか間違ってる所があったら教えてくれませんか?

  • プログラミング 実数 合計値

    プログラミング 実数 合計値 3つの実数を読み込んで合計を表示するというプログラムのソースについてなんですが #include <stdio.h> int main(void) { double na, nb, nc; puts("3つの実数を入力してください。"); printf("実数:"); scanf("%5.lf", &na); printf("実数:"); scanf("%5.lf", &nb); printf("実数:"); scanf("%5.lf", &nc); printf("合計は%5.lfです。\n", (double)(na + nb + nc); return (0); } でコンパイルしてみたんですが、構文エラーでreturnの前の行で')'が';'の前にありません というのが出てきてコンパイルできないのですが、これはどこが間違ってるんでしょうか?

  • 切り捨て、切り上げ、四捨五入

    数学で切り捨て、切り上げ、四捨五入を習いましたが、正の数だけでした。 最近、マイナス値についての切り捨て、切り上げ、四捨五入を考えるようになりました。 切り捨て-4.2なら-4?-5?-4.8なら-4?-5? 切り上げ-4.2なら-4?-5?-4.8なら-4?-5? 四捨五入-4.2なら-4?-5?-4.8なら-4?-5? の時、それぞれいくつになるのでしょう? コンピュータで計算したいときはほしい結果がわかっているので使い分けできますが、 数学の定義としてどちらが正しいかを教えて下さい。

  • 2進数の足し算(C言語)

    C言語初学者です。 タイトル通り、2進数の足し算をするプログラムを作っていますが、行き詰ってしまいました。 特に、桁上げをどうするか悩んでいます。 今の自分の考えでは、入力された数値を10で割り、その余りを足していけばできると思っていたのですが、やはり桁上げや繰り上がりに悩んでいます。 全然できてませんが以下ソースです。 #include <stdio.h> int main(void) { int a, b, i; do { printf("8桁以下の非負の2進数を入力してください(1つ目): "); scanf("%d" ,&a); if (a < 0) puts("負の数を入力しないでください。"); } while (a < 0); do { printf("8桁以下の非負の2進数を入力してください(2つ目): "); scanf("%d" ,&b); if (b < 0) puts("負の数を入力しないでください。"); } while (b < 0); a = a % 10; b = b % 10; よろしくお願いします。

  • エクセル 負の値の四捨五入

    エクセルのバージョンは2002です J404セルは、千円単位での入力(書式ではなく)がなされており、たとえば10万500円なら「100.5」と入力されています。 そこで、これを円単位に修正したうえで円未満を四捨五入したいのですが、 このセルの値として、正の値と負の値の両方が考えられる場合にROUND関数をどのように使ったらいいでしょうか? 実際に「-4533.5695」や「-830.521700000002」という値があり、 =IF(J404>0,ROUND(J404*1000,0),ROUND(J404*-1000,0)*-1) などと試したのですがうまくいきません。 ROUNDDOWNを組み込んでも駄目でした。 負の値をうまく四捨五入できる式は無いでしょうか? よろしくお願いします。

  • C言語で・・

    実数データを入力し、小数点以下四捨五入したときの値を表示せよ。 自分では、以下のように作りました。 #include<stdio.h> int main(void) { float f_a,s; int i_a; printf("実数データを入力してください"); scanf("%f",&f_a); i_a=(int)f_a; s=f_a-i_a; if(s>=0.5){ i_a=i_a+1; } printf("%fを四捨五入すると%dです",f_a,i_a); return 0; } 他の作りかたがあれば、教えていただきたいのですが。IF文などの範囲でお願いします。

  • 10進数を2進数に変換したいのですが・・・

    こんばんは。 入力された10進数を2進数に変換するというプログラムを、一応作成することができたのですが、表示される結果が逆に表示されてしまいます。(例えば、4なら001) どのようにすれば、正しく表示することができるのでしょうか??ちなみにプログラムは #include<stdio.h> int main(void) { int num; printf("数字を入れてください。\n"); scanf("%d", &num); for(num = num ; num>1 ; num = num/2) printf("%d",num%2); printf("%d\n",num); return 0; } です。

  • Cプログラミング 初歩

    #include <stdio.h> int main (void){ double num; printf("実数を入力して下さい:"); scanf("%lf",&num); printf("あなたは%fと入力しましたね\n",num); return(0); } のプログラミングがコンパイル出来ません↓ printf("あなたは%fと入力しましたね\n",num); をprintf("%f\n",num);のようにすると上手くいくのですが、 どうしたらコンパイルできるか分かる人はいますか?