重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

キーボードから入力された実数(double a)の少数第一位の値が5以上なら「切
り上げ」、4以下なら「切り捨て」と表示する。と同時に四捨五入した値を表示
する。ってどうやっらら良いですか? 
整数なら10で割った値の余りを評価すれば良いですが、実数ではどうすれば良いですか?
また、同時に表示するにはどうすれば良いでしょうか?
さっきこの質問をし、回答をいただいたみたいなのですが、そのページか「見つからない」と言われ見る事が出来なかったので再度質問させていただきます。
宜しくお願いします

A 回答 (3件)

0.5と0.4の問題は10倍してから評価すればOKです。


また、四捨五入は0.5を加えてから整数に直してやればOKでしょう。

この回答への補足

回答ありがとうございます。次のようなプログラムを作ったのですがうまく動きません。aの値をうまく読み込んでもらえません。違うところがありましたら指摘ください。

#include <stdio.h>

int main (void){
double a,b,c;
puts("少数第一位まで値を入力してください");
printf("値a:"); scanf("%.1lf",&a);

b=10*a;
c=a+0.5;
int d=c;
if((int)b%10>=5){
printf("切り上げです\n");
printf("四捨五入した値は%dです。\n",d);
}
else {
printf("切り捨てです。\n");
printf("四捨五入した値は%dです。\n",d);
}
return (0);
}

補足日時:2004/06/17 23:24
    • good
    • 0

aを整数化した値nと、a+.5を整数化した値mを比較すればいいのではにでしょうか?


・n=mなら切捨て
・n+1=m(n<>m)なら切り上げ
    • good
    • 0
この回答へのお礼

ひとつの命令でも、色んなアプローチの仕方があるんですね。勉強になりました。
回答ありがとうござます。

お礼日時:2004/06/20 01:34

 Cの double型は内部的には 2進数ですので(ほぼ全ての処理系でそうなっているはずです)、小数を扱うと誤差が生じるケースがあるはずです。


 なので、キーボードから入力された小数を数値ではなく、まずは文字列として受け取り、小数点の右側と左側をそれぞれ整数型に変換して、それぞれ独立した計算処理をするのが、より厳密で、理想に近い処理と言えます。

 ただ、そこまでの精度が必要無ければ、#1の回答のように 10.0倍して処理すれば良いと思います。
    • good
    • 0
この回答へのお礼

まず文字式でやるという方法もあるんですか。又チャレンジしてみます!とりあえず今回は10倍で行こうと思います。
回答ありがとうございました。

お礼日時:2004/06/20 01:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!