- PR -

小数点を求める場合。

投稿者投稿内容
yuki
会議室デビュー日: 2003/11/11
投稿数: 6
投稿日時: 2004-01-23 11:31
質問です。


小数点第3位を四捨五入して、第2までの結果を求めたいのですが

どうしたらよいのでしょうか?


roundメソッドを使って色々と試しているのですが、うまくいきません。

知ってる方、いましたら返事をください。宜しくお願いします。

0.05000000000000002という値を0.05にしたいのですが。。。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2004-01-23 11:57
Math.round(0.05000000000000002d * 100d) / 100d
でどうでしょう?
顔爺
ベテラン
会議室デビュー日: 2003/10/03
投稿数: 52
投稿日時: 2004-01-23 12:09
java.math.BigDecimal を使うとよろしいかと。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-01-23 12:22
引用:

顔爺さんの書き込み (2004-01-23 12:09) より:
java.math.BigDecimal を使うとよろしいかと。


その前に、元の数値の型も変換先の数値の型もわからないので方法の示しようがないと
思うのですが > yukiさん

「うまくいかないコード」を書いていただくと適当な回答がもらえると思いますよ。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-01-23 12:33
引用:


小数点第3位を四捨五入して、第2までの結果を求めたいのですが

どうしたらよいのでしょうか?


roundメソッドを使って色々と試しているのですが、うまくいきません。

知ってる方、いましたら返事をください。宜しくお願いします。

0.05000000000000002という値を0.05にしたいのですが。。。




BigdecimalのROUND_HALF_UPが多分お探しのものだと思います。

http://hp.vector.co.jp/authors/VA012898/diary/2003_03.htm
この辺りのページの説明が分かりやすいかも知れません。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-23 13:01
unibon です。こんにちわ。

引用:

yukiさんの書き込み (2004-01-23 11:31) より:
小数点第3位を四捨五入して、第2までの結果を求めたいのですが

どうしたらよいのでしょうか?


標準のライブラリを使うとすれば、表示時に java.text.DecimalFormat クラスを使ったり、あるいは表示の前の演算の時点で java.math.BigDecimal クラスを使うことが、考えられます。
一方、自前でやるとすれば、以前に自分で作ったのですが、つぎのような感じになります。
http://www.geocities.co.jp/SiliconValley/4334/unibon/javascript/decimalcalculate.html
桁上げ(?と呼ぶのでしょうか)の処理が面倒になります。すなわち 0.05000000000000002 の場合は切り捨てるだけなので楽なのですが、0.04999999999999998 の場合が面倒くさいです。もっと楽なやりかたがあるのかもしれませんが。
#Java ではなく JavaScript ですが、ほぼ同じでしょう。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2004-01-23 14:59
おそらく double で実数を扱っていて「あれ ?」と思われたのでしょうが、000000000000002 がどうしてついてしまうのかわからないまま闇雲に丸め処理を行ってしまうのは危ない気がします。

最初から BigDecimal を使うとか、整数で固定小数点演算(相当)を行うとかを検討したほうがよいかもしれません。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-01-23 19:02
引用:

0.05000000000000002という値を0.05にしたいのですが。。。


この最後の方に付いている「2」が怪しいですね。
これは、恐らく浮動小数点演算の過程で発生した誤差でしょう。
浮動小数点演算をプログラムで実装する際には、通常頭で考える数式とは違った作り
方をしないとこのような誤差が発生します。例えば、単純に複数の浮動小数点数の
平均を求める場合でも、単に「全部足して個数で割る」では駄目ですよ。

この手の話は、Web上を調べるとありますよ。
http://msugai.fc2web.com/java/class/DecimalTips.html

確かCの時代にはそういう本があった気がするなあ。
今オンラインブックストアを調べたんですが、ちょっと見つかりませんでした。

スキルアップ/キャリアアップ(JOB@IT)