- 締切済み
C++の四捨五入
プログラミングで言う四捨五入とはいったいなんなのでしょうか? 丸めと四捨五入が混同していてよくわからなくなってます C++でこれは四捨五入ですか? cout << fixed << setprecision(1) << num/7.0 << endl; いままで、とはいっても初心者ですが四捨五入の時は以下のようにしていました。 cout << round((num/7.0)*10)/10 << endl; 小数点第2位を四捨五入しなさいと言われた時はどちらも同じですか?
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- unokwave
- ベストアンサー率58% (966/1654)
>カテゴリーマスターが何なのかわからないですが本当にカテゴリーマスターさん? そのような称号がついているのですか? okwaveが何らかの基準で判定しているのでしょうし、一応長年ITで生計を立ててますが、マスターを名乗った記憶はありません。 コード動かしてみてsetprecisionの挙動を誤解している事に気づきました。 申し訳ありません。 ただround((num/7.0)*10)/10が四捨五入になっていない事に言及しているつもりです。
- _kappe_
- ベストアンサー率68% (1581/2304)
回答No.4の者です。 両者が同じかと問われたら、出力内容が異なる場合がある、完全に同じではないという答えになります。 2.95という値を四捨五入して出力するとき、round()を使うほうだと"3"だけ(coutのデフォルト状態の場合)ですが、setprecision()を使うほうだと"3.0"となります。
- _kappe_
- ベストアンサー率68% (1581/2304)
setprecision()を使う方法は、coutなどのストリームに対する入出力の時にだけ使えます。 たとえば、「num/7.0を小数点以下第2位で四捨五入した値を変数ansに代入したい」という場合は double ans = round((num/7.0)*10)/10; と書くことはできても double ans = fixed << setprecision(1) << num/7.0; という書き方はエラーになります。 四捨五入に限ればround()を使う書き方を覚えておけば使える場面が広いということです。 四捨五入以外の方法で丸めたい場合には、round()の代わりにceil()やfloor()という関数を使います。
- chachaboxx
- ベストアンサー率23% (412/1777)
『丸め』は指定桁以上の表示方式 『四捨五入』は指定桁以下の取り扱い方法 『切り上げ』『切り下げ』も取り扱い方法 プログラミング言語に依存することではなく、通常の算術処理のひとつです。
- unokwave
- ベストアンサー率58% (966/1654)
setprecisionは整数部の桁数を含む桁を指定するものですから、 > cout << fixed << setprecision(1) << num/7.0 << endl; はnumが123.45であった場合1と出力されます。 >cout << round((num/7.0)*10)/10 << endl; numが123.45だと出力は17.6になりますね。
お礼
カテゴリーマスターが何なのかわからないですが本当にカテゴリーマスターさん?
- asuncion
- ベストアンサー率33% (2127/6289)
>プログラミングで言う四捨五入とはいったいなんなのでしょうか? 算数と同じです。所定の桁が4以下ならば切り捨て、5以上ならば切り上げです。 >丸めと四捨五入が混同していてよくわからなくなってます 丸めという概念の中に「切り捨て」「切り上げ」「四捨五入」というサブ概念があります。
お礼
小数点第2位を四捨五入しなさいと言われた時はどちらも同じですか?
お礼
回答者さんが言ってることは解ってます 私が質問しているのは問題の回答として以下は同じですか?ということですね cout << fixed << setprecision(1) << num/7.0 << endl; cout << round((num/7.0)*10)/10 << endl;