「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NET開発]] * 目次 [#kcd96454] #contents *概要 [#t3d0e5ae] 特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。 *桁溢れ [#xa851728] **動作 [#v3f1c1b6] ***オーバーフロー [#k129fd21] -扱える数値の最大値を超える -オーバーフロー時:System.OverflowException例外、 ***アンダーフロー [#l280271b] -指数部が小さくなり過ぎる -アンダーフロー時:System.UnderflowException例外が発生する。 **コンパイラ オプション [#q24c1c04] .NETはコンパイラ オプションでオーバーフロー、アンダーフローのチェックが可能である。 -Visual Basicコンパイラ オプション一覧 > /optionstrict~ http://msdn.microsoft.com/ja-jp/library/3wh7c190.aspx --C#コンパイラ オプション一覧 > /checked~ http://msdn.microsoft.com/ja-jp/library/h25wtyxf.aspx --Visual Basicコンパイラ オプション一覧 > /removeintchecks~ http://msdn.microsoft.com/ja-jp/library/key2x70f.aspx **キーワード / ステートメント [#g81e1418] コンパイラ オプションで設定したオーバーフロー、アンダーフローのチェックの既定の動作を変更したい場合は、 -C#では、checked、unchecked、というキーワードを使用する。 --ステートメントのキーワード (C#リファレンス) > checked~ http://msdn.microsoft.com/ja-jp/library/74b4xzyw.aspx --ステートメントのキーワード (C#リファレンス) > unchecked~ http://msdn.microsoft.com/ja-jp/library/a569z7k8.aspx -VBではこのステートメントに合致するものが存在しない --VBは暗黙の型変換を許容している。 --Option Strictをオンにすることで暗黙の型変換(による桁溢れ)を抑止できる。 ---ステートメント (Visual Basic) > Option Strictステートメント~ http://msdn.microsoft.com/ja-jp/library/zcd4xwzs.aspx *小数点を持つ値の計算 [#q5ebfe5d] **問題 [#ybe85629] 特に小数点を持つ数値の計算を行う場合は、以下の点に考慮する。 ***丸め誤差 [#mebdb497] -切り捨て -四捨五入 -切り上げ ***打ち切り誤差 [#yb8fec74] 0.3333.... ***桁落ち [#y7a78a71] 計算結果が0に極端に近くなる加減算 ***情報落ち [#i5bea01d] 計算結果が0に極端に近くなる加減算 **Decimal [#nf9ffa92] 特に小数点を持つ金額の計算には、Decimalを用いる。 Decimalの特徴を以下に示す。 -DOBON.NET > プログラミング道 > .NET Tips > 基本~ 小数(浮動小数点数型)の計算が思った結果にならない理由と解決法~ http://dobon.net/vb/dotnet/beginner/floatingpointerror.html ***Decimalの特徴 [#x2bcd749] -ほとんどの10進数の小数は2進数(Single、Double型などの浮動小数点型)で表現することができない。 --このような値は2進数では近似値でしか表現できず、その誤差が計算結果として現れる(打ち切り誤差)。 --ただし、k/(2^n)(kとnは整数)で表すこともできる小数は2進数でも表現できる。 -Decimalは浮動小数点型と比べ、金額計算の慣例に適合する。 --10進数を表現する。 --有効桁数が多く、範囲が狭い(28 ~ 29)。 --格納できる値の大きさの範囲が狭いは、金額の計算には十分。 -問題点は、計算速度が遅いこと。 ***参考資料 [#kd333163] -MSDNライブラリ > C#リファレンス > C#のキーワード > 型 --decimal~ http://msdn.microsoft.com/ja-jp/library/364x0z75.aspx --float~ http://msdn.microsoft.com/ja-jp/library/b1e65aza.aspx --double~ http://msdn.microsoft.com/ja-jp/library/678hzkk9.aspx ---- Tags: [[:プログラミング]], [[:.NET開発]]