3

ユーザー入力からの値とDBからの値の2つの値があります。

var userinput = form["someInput"];
var valuefromDB = GetValue(someNumber);

public float? GetValue(int id){
return (float?) db.table.where(p=> p.id == id).select(p=> p.Value).SingleOrDefault();
}

userinput は文字列として値「1」を持ち、valuefromDB は float として値 0.001 を持ちます。

だから 1 / 0.001 = 1000

しかし、私の c# コードでは結果として 999.999939 が得られます。

var final = float.Parse(userinput) / valuefromDB

ユーザー入力値として「2」がある場合、結果は正しく、2000...

4

2 に答える 2

9

これは、すべての 10 進数を 2 進数 ( を使用した表現float)で正確に表現できるわけではないためです。解決策は、結果を目的の小数点以下の桁数にフォーマットすることです。これにより、丸められ、結果として「正しく」表示されます。

更新:floatを表示用にフォーマットするには、この MSDN リファレンス ページこのページの例を参照してください。

于 2012-06-26T21:22:36.120 に答える
1

float によって提供されない純粋な精度については、代わりに decimal を使用します。

C# の Decimal、Float、Double の違いは何ですか? を参照してください。

于 2012-06-26T21:24:16.973 に答える