2014-01-14 5 views
5

私はVB.NET 2010を使用しています。まず、値がDB2テーブルから引き出されているのでデータベースの問題だと思っていました。しかし、それは.NET自体にあるようです。私はその後、値が212639.047で、sAmountを見るとCTypeを使用してVB.netで単精度浮動小数点数を返します

Dim sAmount As Single 
    sAmount = CType("212639.04", Single) 

:私は、次の2行のコードを実行することによってこれを決定しました。

私の質問:7はどこから来たのですか?

答えて

2

問題は、浮動小数点データ型であるSingleを使用していることです。これは、2進小数ではない小数点ではうまく機能しません。

Floating-Point Expressions Do Not Compare as Equal

あなたは浮動小数点数(シングル・データ・タイプ(ビジュアル 基本)とダブル・データ・タイプ(Visual Basicの))を使用する場合、それらはバイナリ分数として に格納されていることを覚えておいてください。これは、正確な の2分数ではない量を表すことができないことを意味します( 形式k /(2^n)のkとnは整数です)。例えば、0.5(= 1/2) と0.3125(= 5/16)を正確な値として保持することができ、一方、0.2(= 1/5) と0.3(= 3/10)は近似にすぎない。

が浮動小数点値で動作するとき、この不正確さのため正確な結果に頼ることはできません。特に、 の理論的に等しい2つの値は、わずかに異なる表現を有するかもしれない。浮動小数点量

あるいは
Calculate the absolute value of their difference by using the Abs method of the 
Math class in the System namespace. 

Determine an acceptable maximum difference, such that you can consider the two 
quantities to be equal for practical purposes if their difference is no larger. 

Compare the absolute value of the difference to the acceptable difference. 

を比較する

二重高い精度で数を返します。

+0

ありがとうございます。私は他の人のコードを継承しました。ありがたいことに、これは表示上の問題であり、格納されている実際の値ではありません。 –

+0

私の編集が見えなかった場合。ダブルを使用するとすぐに問題が解決します。 – tinstaafl

関連する問題