文字列を浮動小数点数に解析することについて、非常に興味深いことがあります。私は一定の文字列を解析しテストする場合.net Parse()float float values
IDbReader myReader;
...
string sValue = myReader.GetValue(0).ToString(); // 12.339123 for example in VS debug and watch
// the content of sValue is what I want to be at this point, but...
Single fValue = Single.Parse(sValue);
// Now the fValue is 12.34!
は、Parseメソッドが正常に動作:
string sValue = "12.339123";
Single fValue = Single.Parse(sValue);
// Now the fValue is 12.339123!
場合は、文字列値をここIDbReader使用してデータベースから取得した例でありますIDbReaderのsValueの内容を元の値として解析できない理由はわかりません(VSデバッグからわかるように)。 float値を小数点以下2桁のfloat値に丸めます。どのようにして元の価値を得ることができますか?
どうすれば正確に同じ値を返すことができますか?
私は
更新.NET 2.0を使用しています:私はfloat型/小数値に直接値を取得するには、このようなGetFloatをやGetDecimalメソッドとしてのgetXXXを使用しようとしました。残念ながら、これらのメソッドはすべて同様の丸め問題を抱えているようです。 GetValue()とstringへの強制は、データベースとまったく同じ文字列値を取得します。私は浮動小数点または小数点値の.Net側の変換を行うことができると思ったが、Parse()は私のケースでは失敗する。 Parse()で丸めが発生する理由はわかりません。いくつかの値がそこにあると示唆したように、VSデバッグ、ウォッチまたはログによる丸めの原因になることがあります。しかし、フロート値をテキストボックスに入れると、小数点以下2桁に丸められます。それは本当にイライラする問題です。
なぜ文字列ですか? – SLaks
12.339123 "がすべて等しいわけではありません。 –
列のデータ型は? –