掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
小数点以下第3位までを保持する型は何ですか (ID:88467)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
出遅れたので、他の方の回答への補足事項を。 ひろさんが、固定小数点型(Currency)を挙げられていますが、これを使って 演算するときには、「演算結果のデータ型」にも注意するようにしてください。 たとえば、「Currency型 + Currency型」の演算結果は Currency型ですが、 「Currency型 / Currency型」の演算結果は、Double型となるため、 単純に割り算などを行ってしまうと、結局は誤差を生じる可能性があります。 それから、影さんが Format関数やRound関数を紹介されていますが、 これらを使う場合にも、若干の注意が必要です。 まずFormat関数は、OSによって丸め方が異なる可能性があります。 [Windows XP 環境への既存アプリケーションの移行] - [数値の「丸め」処理に関する問題] http://www.microsoft.com/japan/technet/prodtechnol/winxppro/deploy/exappmigratoxp.mspx また、Roundに関しては、ExcelのROUNDワークシート関数が四捨五入なのに対し、 VBのRound関数が銀行型丸め(bankers rounding)を採用している点も要注意です。 # bankers roundingは、浮動小数点表現(IEEE 754)のデフォルトの丸めモードです。 〈Excelワークシート関数〉 =ROUND(1.2325, 3) → 1.233 =ROUND(1.2335, 3) → 1.234 =ROUND(1.2345, 3) → 1.235 =ROUND(1.2355, 3) → 1.236 =ROUND(1.2365, 3) → 1.237 〈VB6/VBA版〉 Round(1.2325, 3) → 1.232 Round(1.2335, 3) → 1.234 Round(1.2345, 3) → 1.234 Round(1.2355, 3) → 1.236 Round(1.2365, 3) → 1.236 〈VB.NET版〉 Math.Round(1.2325, 3) → 1.232 Math.Round(1.2335, 3) → 1.234 Math.Round(1.2345, 3) → 1.234 Math.Round(1.2355, 3) → 1.236 Math.Round(1.2365, 3) → 1.236 あと、ガッさんがDecimalについても言及されていますね。 精度がどうしても気になるなら、このDecimal型を使ってみると良いでしょう。 これは、VB6ならばVariant型の内部データ型(CDec関数で生成可能)ですが、 VB.NETならば、Decimal型という専用のデータ型となっています。 Decimal型であれば、VB6のCurrency型とは異なり、割り算を行っても、 「Decimal型 / Decimal型」が、Decimal型のまま演算される事になりますので、 演算誤差は少なくなります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.