QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

小数を四捨五入し、小数で表示したい

いつも参考にさせていただいてます。

今回小数第三位で四捨五入を行い、
小数第二位で値を表示をしたいと思っております。
(例:12.56399 → 12.56、-5.688012 → -5.69など)

小数第一位で四捨五入をし、整数で表示する場合は
0.5を足して(または引いて)Fix関数利用で表現できるのは
分かるのですが、
『小数を四捨五入』かつ『小数で表示』の場合が
どうもうまくできなくて困っています。

どうかご教授願います。

質問者:司会者

回答

こんにちは。
以下でどうですか?



<VB.NET>
Dim inttemp  As Integer
Dim answer As Double

inttemp = 10^ 小数点の有効桁数

answer = Int(実際の数値(小数) * inttemp + 0.5) / inttemp 


あと、余計ですが環境を書いてくださいね。
[ メッセージ編集済み 編集者: SE卵 編集日時 2005-02-14 12:01 ]

投稿者:SE卵

編集 履歴 (0)

ちょっと調べてみましたが、
Math.Roundメソッドでもいけそうですね。
たぶん、こんな感じ(未確認)?

Dim resl As Double
resl = Math.Round(XXXX * 1000, 1) / 1000

やってることは、SE卵さんと同じですが・・


投稿者:らぶま

編集 履歴 (0)

がりうむさん

確かに・・
やっぱ普通にSE卵さんのようにやるべきですね。
勉強になりました。


投稿者:らぶま

編集 履歴 (0)

ご返答下さった皆様、
おかげさまで実装できました(^^)
ありがとうございました。
(ちなみに環境はVS.NET2003、IIS6.0、言語はVB.NETです。今更ですが…)

投稿者:司会者

編集 履歴 (0)

因みに、負数の場合はInt関数では四捨五入されないと思います。
投稿の例に記載されていた直値を使った場合、

Dim Res as Double

Res = CType(12.563.ToString("0.00"), Double)
Res = CType(-5.688012.ToString("0.00"), Double)

でそれぞれ12.56、-5.69が取得出来ます。

投稿者:yyy

編集 履歴 (0)

けっこう誤差がでるのでDoubleよりDecimalをつかったほうがいいと思いますよ

投稿者:ゆうじゅん

編集 履歴 (0)

>因みに、負数の場合はInt関数では四捨五入されないと思います。
Int関数が駄目ならFix関数(参考:msdn Int 関数、Fix 関数)
じゃんぬねっとさんのサンプルではばっちし対処されてますね
ところで、私今までずっと四捨五入にFormat関数使ってたので、ちょっと不安になって以下のコードを動かしてみたのですが…




Dim s As String = ""
s += Math.Round(4.445, 2) & vbCrLf
s += Format(4.445, "0.00") & vbCrLf
s += CDbl(4.445).ToString("0.00") & vbCrLf
s += CDec(4.445).ToString("0.00") & vbCrLf
s += Math.Round(-4.445, 2) & vbCrLf
s += Format(-4.445, "0.00") & vbCrLf
s += CDbl(-4.445).ToString("0.00") & vbCrLf
s += CDec(-4.445).ToString("0.00") & vbCrLf
Me.TextBox1.Text = s

結果は以下の通り。ちなみにOSはWin2Kです。

--結果--
4.44
4.45
4.45
4.45
-4.44
-4.45
-4.45
-4.45
--------

がりうむさんのリンク先にこんな記事もありましたが、Win2Kだと期待した数値が返ってきます。少なくともMath.Roundとは挙動が違うことは確認できてるわけですが、全ての数値に関して検証したわけではないので未だにちょっと不安これって、SP未適用のWinXP以外では文字通りの「四捨五入」になってるんでしょうか?自分でも探してみたんですが、確証となるような記事は見つけられなくて…もしご存知でしたらご教授ください。m(_ _)m

投稿者:ぼのぼの

編集 履歴 (0)

けっこう誤差がでるのでDoubleよりDecimalをつかったほうがいいと思いますよ

そういえば、decimal 使ったことないですね (1度も)
仕事でも使ったためしがないので、存在を忘れかけてました。

128 ビットなのは知ってるんですけども...
4.1.7 decimal 型

# オーバーロードにて、出番あげても良いかも... (^-^*)
________________C# と VB.NET の入門サイト
<a href="http://blogs.wankuma.com/jeanne/" target="
blank">じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

じゃんぬねっとさんの書き込み (2005-02-14 15:45) より:

自分のサイトなのに... かなり orz

いぢけてやるぅ (w

Operaだと重なって読めない。。。いぢめだ。いぢけてやるぅ(w


投稿者:Jitta

編集 履歴 (0)

自分のサイトなのに... かなり orz

いぢけてやるぅ (w

同じく Firefox でもダメ。

投稿者:未記入

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。