- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:四捨五入について質問です。)
四捨五入の方法についての質問
このQ&Aのポイント
- GUIアプリのエディットコントロール画面から、任意の数値を入力させ、小数点以下n桁で四捨五入をさせたいと考えています。
- 現在、atofやatoiを使って四捨五入を試していますがうまくいきません。
- 皆さんのお知恵をお貸しください、文字列処理以外で四捨五入する方法があれば教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
浮動小数点の誤差に起因する問題です。次を参照してください。たいへん奥が深いですよ。 http://www.geocities.co.jp/SiliconValley-Bay/5308/
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2127/6289)
回答No.3
>どこかにテクが入っているのでしょうか? (3)+0.5する の箇所です。
- kmee
- ベストアンサー率55% (1857/3366)
回答No.2
よくあるやりかたは 1)atofで文字列→浮動小数点(double) 2)10.0^n 掛ける 3)+0.5する 4)floorで整数化 5)10.0^nで割る とです。
質問者
補足
申し訳ございません、 ・atoiを用い、数値を取り込み、10^nをかけて整数値にしてから四捨五入 -> 0.05と0.0499...の違いがつけられない とどのように違うのでしょうか・・・。 どこかにテクが入っているのでしょうか? よくわかりません・・・・
- Willyt
- ベストアンサー率25% (2858/11131)
回答No.1
四捨五入は施したい桁に5を加えてその桁以下を切り捨てればいいのですが、それではまずいのでしょうか?
質問者
お礼
ありがとうございました。 結局、文字列取り込みのところは、小数点以下n+1桁以下を削除する取り込みを行い、 あとはNo2の方もおっしゃっていたように、整数値にあげてから切り捨ててうまくいきました。 ちなみに、0.205を小数点第三位で四捨五入する時、No1がおっしゃられた方法だと桁下がりになります。
質問者
補足
ご回答ありがとうございます。 よく考えると、躓いているのって文字列の取り込みのところでした。 0.1235 と 0.1234999999999999999999999999999999999999999 を同じようにatofで取り込んでいたので、 取り込んだ後、どっちも同じ数と認識されていたようです。 うーん。
お礼
すばらしいHPのご紹介、ありがとうございます。 浮動小数点の誤差に起因する問題についてはソ開くらいまでなら認識していましたが、 具体的に集中的に集められたHPで、よりいっそう知識が深まった気がします。 結局、文字列取り込みのところは、小数点以下n+1桁以下を削除する取り込みを行い、 あとはNo2の方もおっしゃっていたように、整数値にあげてから切り捨ててうまくいきました。