- - PR -
四捨五入
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-29 09:07
ISO 31-0です。 http://www.dataaction.co.jp/bunsyo-j.htm | ||||||||
|
投稿日時: 2003-07-29 11:11
私は次のような関数を作成して四捨五入しています。参考までに...
引数"Figure"に-5をセットすると1万の位で四捨五入します。 -------------------------------------------------------------------------- Public Function Round(ByVal value As Double , Optional ByVal Figure As Integer = 0) As Double Dim dblData1 As Double = 0 Dim dblData2 As Double = 0 Dim dblRound As Double = 0 dblData1 = value * (10 ^ Figure) dblData2 = dblData1 + System.Math.Sign(value) * 0.5 '四捨五入 '参考までに切り上げ、切り捨ての計算です。 'dblData2 = dblData1 + System.Math.Sign(value) * 0.9 '切り上げ 'dblData2 = dblData1 '切り捨て dblRound = Fix(dblData2) / (10 ^ Figure) Return dblRound End Function -------------------------------------------------------------------------- [ メッセージ編集済み 編集者: xkimura 編集日時 2003-07-29 11:12 ] | ||||||||
|
投稿日時: 2003-07-29 13:57
いいえ、doubleにしても誤差が小さくなるだけで、 本質的には何も解決されていません。
浮動小数点には誤差があって当然だということを 常に認識しておくべきです。 | ||||||||
|
投稿日時: 2003-07-29 14:22
や、longにしたらそりゃそうですが、ここで書かれてたのはintの時の話では? # 深く考えてないので浮動少数に関する他の問題もあるかもしれませんが。 例が単に精度(有効桁数)オーバーのもののような気がしますが、ちょっとここでは話が違うような気がします。
あ、もちろん、この話には異存はありません。 | ||||||||
|
投稿日時: 2003-07-29 14:29
あ、整数のままやるやり方はどうだとか、浮動少数を使うべきだとか、そういう意図で書いたのではありませんので。 単に、ここで前の誤差の例をあげるのは、ちょっと話が違ってしまいそうと思っただけです。 | ||||||||
|
投稿日時: 2003-07-29 14:50
unibon です。こんにちわ。
#私は .NET は知らないのですが、 #以下、昔の VB/VBScript と同じだろうという前提で書きます。
long のキャストは、切捨てではなく、四捨五入に似た丸めかもしれません (これはちょっと自信がありません。でも VB/VBScript の CLng はそうでした)。
0.1を55回加算すると、Console.WriteLine の出力は 5.5 に見えますが、 実際には 5.5 より小さい値(5.499999...)になっているのでしょう。 すなわち、Console.WriteLine が過度に丸めています。 したがって、この段階ですでに変数の値が誤差を持っていることになります。 #以下、あとで追加。 Console.WriteLine が丸めているわけではなく、 数値を文字列に変換するモジュールが丸めています。 [ メッセージ編集済み 編集者: unibon 編集日時 2003-07-29 14:52 ] | ||||||||
|
投稿日時: 2003-07-29 15:17
まあ確かにそうなんですが、ここでの私の発言は、 ななさんの > わたしの場合、浮動小数点型をdoubleに統一することで回避しています。 という発言が「全てdoubleを使っていれば浮動小数点の誤差も気にしなくてよい」という 誤解を招きかねないと思ってのものです。 # 金利の計算に浮動小数点型を使われて、ただでさえ少ない利息が # さらに減らされでもしたら目も当てられませんからね。 | ||||||||
|
投稿日時: 2003-07-29 15:31
あ、意図はよく分かりました。 もちろん、浮動小数点の問題は軽視してよいものではないです。 # この辺は意外に(どころか全く)知らない人も結構いてびっくりしたりしますね。 ま、私が書いたのはただ「ここの今の例としては」という話ですので。 |