- - PR -
小数点を求める場合。
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-01-23 11:31
質問です。
小数点第3位を四捨五入して、第2までの結果を求めたいのですが どうしたらよいのでしょうか? roundメソッドを使って色々と試しているのですが、うまくいきません。 知ってる方、いましたら返事をください。宜しくお願いします。 0.05000000000000002という値を0.05にしたいのですが。。。 | ||||
|
投稿日時: 2004-01-23 11:57
Math.round(0.05000000000000002d * 100d) / 100d
でどうでしょう? | ||||
|
投稿日時: 2004-01-23 12:09
java.math.BigDecimal を使うとよろしいかと。
| ||||
|
投稿日時: 2004-01-23 12:22
その前に、元の数値の型も変換先の数値の型もわからないので方法の示しようがないと 思うのですが > yukiさん 「うまくいかないコード」を書いていただくと適当な回答がもらえると思いますよ。 | ||||
|
投稿日時: 2004-01-23 12:33
BigdecimalのROUND_HALF_UPが多分お探しのものだと思います。 http://hp.vector.co.jp/authors/VA012898/diary/2003_03.htm この辺りのページの説明が分かりやすいかも知れません。 | ||||
|
投稿日時: 2004-01-23 13:01
unibon です。こんにちわ。
標準のライブラリを使うとすれば、表示時に java.text.DecimalFormat クラスを使ったり、あるいは表示の前の演算の時点で java.math.BigDecimal クラスを使うことが、考えられます。 一方、自前でやるとすれば、以前に自分で作ったのですが、つぎのような感じになります。 http://www.geocities.co.jp/SiliconValley/4334/unibon/javascript/decimalcalculate.html 桁上げ(?と呼ぶのでしょうか)の処理が面倒になります。すなわち 0.05000000000000002 の場合は切り捨てるだけなので楽なのですが、0.04999999999999998 の場合が面倒くさいです。もっと楽なやりかたがあるのかもしれませんが。 #Java ではなく JavaScript ですが、ほぼ同じでしょう。 | ||||
|
投稿日時: 2004-01-23 14:59
おそらく double で実数を扱っていて「あれ ?」と思われたのでしょうが、000000000000002 がどうしてついてしまうのかわからないまま闇雲に丸め処理を行ってしまうのは危ない気がします。
最初から BigDecimal を使うとか、整数で固定小数点演算(相当)を行うとかを検討したほうがよいかもしれません。 | ||||
|
投稿日時: 2004-01-23 19:02
この最後の方に付いている「2」が怪しいですね。 これは、恐らく浮動小数点演算の過程で発生した誤差でしょう。 浮動小数点演算をプログラムで実装する際には、通常頭で考える数式とは違った作り 方をしないとこのような誤差が発生します。例えば、単純に複数の浮動小数点数の 平均を求める場合でも、単に「全部足して個数で割る」では駄目ですよ。 この手の話は、Web上を調べるとありますよ。 http://msugai.fc2web.com/java/class/DecimalTips.html 確かCの時代にはそういう本があった気がするなあ。 今オンラインブックストアを調べたんですが、ちょっと見つかりませんでした。 | ||||
