- - PR -
四捨五入
1|2|3|4|5
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-28 18:02
VB.NETでWeb開発をしています。
下記の様な整数値を1万の位で四捨五入したいのですが、VB.NETのクラスライブラリで なにか良い関数はありませんか? Dim aa as Integer = 2367896 ↓ 一万の位「6」を四捨五入して「2400000」にしたい! よきアドバイスをお願いします。 | ||||||||
|
投稿日時: 2003-07-28 18:32
10万分の1にして、0.5足して、int型に代入し、10万倍する。FAQ「小数点x桁で四捨五入する」と、考え方は同じです。 この場合、「桁数の制限」をあまり考える必要がないので楽ですね。負数を扱うなら、注意してください。 ※-24000は-30000ですか?-20000ですか? | ||||||||
|
投稿日時: 2003-07-28 18:45
こんばんわ
.NET使ったことがないので分かりませんが、 四捨五入は英語でroundだったと思うので、 この単語をキーワードにソースコードを全検索すれば もしかしたら見つかるのではないでしょうか。 # そもそも、VB.NETにクラスライブラリのソースコードがついているのであろうか... | ||||||||
|
投稿日時: 2003-07-28 19:56
> 四捨五入は英語でroundだったと思うので、
System.Math.Round() です。 | ||||||||
|
投稿日時: 2003-07-28 21:09
ヘルプより引用 >Math.Round(3.44, 1); //Returns 3.4. >Math.Round(3.45, 1); //Returns 3.4. >Math.Round(3.46, 1); //Returns 3.5. 2番目の例のように、Roundは四捨五入ではなかったはず。
多分、偶数丸め。 | ||||||||
|
投稿日時: 2003-07-28 21:33
なるほど。勉強になります。
ちょっと強引ですが...こんな方法でどうでしょうか? Console.WriteLine(Convert.ToDouble(String.Format("{0:0.0}", 3.04)).ToString()); // 3.0 Console.WriteLine(Convert.ToDouble(String.Format("{0:0.0}", 3.05)).ToString()); // 3.1 Console.WriteLine(Convert.ToDouble(String.Format("{0:0.0}", 3.06)).ToString()); // 3.1 Console.WriteLine(Convert.ToDouble(String.Format("{0:0.0}", 3.14)).ToString()); // 3.1 Console.WriteLine(Convert.ToDouble(String.Format("{0:0.0}", 3.15)).ToString()); // 3.2 Console.WriteLine(Convert.ToDouble(String.Format("{0:0.0}", 3.16)).ToString()); // 3.2 | ||||||||
|
投稿日時: 2003-07-29 02:08
そのやり方には大きな落とし穴があります。 計算に浮動小数点を使用していた場合、丸め誤差により 正しくない値になってしまうことがあります。
こういう場合は 「5万を加えて、10万で割り(int型のまま)、10万倍する」 のが定石です。 【追記】 もちろん、5万を加えた時点で、intの最大値を超えてしまわないように 注意しなければなりません。 [ メッセージ編集済み 編集者: yamasa 編集日時 2003-07-29 02:13 ] | ||||||||
|
投稿日時: 2003-07-29 08:28
> 計算に浮動小数点を使用していた場合、丸め誤差により
> 正しくない値になってしまうことがあります。 float型を使用しているのが問題だと思いますが。 float -> double にした場合、ビット0でAppendされる。) わたしの場合、浮動小数点型をdoubleに統一することで回避しています。 # C++での経験ですけど。 |
1|2|3|4|5
次のページへ»