SQLマネータイプをCLRタイプの小数点にキャストします。 Decimalは、基数10の内部表現を使用する浮動小数点数値型であるため、近似なしの範囲内の任意の10進数を表すことができます。
これはfloatよりも遅く、精度の面では取引範囲ですが、お金に関係するものについては、小数点以下を使用して近似誤差を避けてください。
編集:「なぜこれが起こったのか」 - 理由は2つあります。第1に、浮動小数点数は、小数部分を正確に表現することが不可能な、基数2の内部表現を使用します。第2に、浮動小数点数が浮動小数点と呼ばれる理由は、整数部分に固定精度を使用し、小数部分に固定精度を使用する代わりに、絶対値と精度の間で絶え間のトレードオフを提供するということです。整数部分が比較的小さい数(1.5のように)は、内部表現の大部分を小数部分に割り当てることができるため、はるかに高い精度を提供します。積分部分の大きさが増加するにつれて、これまでは精度のために使用されていたビットがより大きな整数値を記憶するために必要となり、したがって、小数部分の精度が損なわれる。
非常に、非常に粗雑、それは10桁の数字を持っているようなものです、あなたが好きな場所に小さい値のために、あなたは非常に正確な画分を表すことができるようにあなたは、小数点を置くことができます。
1.000000
が、より大きな値のためにあなたは、この実際作品は、IEEE 754標準をチェックアウトする方法の詳細について
1234567890.2
:利用できるほぼそんなに小数の精度を持っていません。
Er ... no。申し訳ありませんが、これは間違っています。それは意見の問題ではなく、それは間違っているだけです。 base-10表現を使用し、基数2の近似のために丸め誤差を発生させないため、.NETアプリケーションでの金額表現に小数 - 浮動小数点または二重ではなく - を使用します。 –