11

この問題に関するスレッドや投稿がインターネット上にいくつかあることは知っており、それらを読みました (すべての記事ではないことを認めなければなりません) が、どれも私を完全に満足させるものではありませんでした。

私の状況:
ODP.net (dll バージョン 2.111.6.0) を使用して Oracle DB (バージョン 10 + 11) にアクセスし、DataReader を使用してデータ (.NET 3.5、C#) を取得しています。

このコードを使用すると、「System.OverflowException (算術演算がオーバーフローしました。)」が発生します。


decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

この結果は、' 3,000000000000000000000000000000000000000000000000000000E-126 'という値になります。


decimal.TryParse(oraReader.GetOracleValue(0).ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

ここで、この値を適切に取得して評価する方法を見つける必要があります。DB は、制御できない他のアプリからも使用されるため、そこでの変更は不可能です。

C# コードの型を「decimal」から「double」に変換することも、実際にはオプションではありません。

何か案は?

4

2 に答える 2

16

OracleDecimal は、decimal よりも精度が高くなります。そのため、最初に精度を下げる必要があります。すべての解析を忘れて、暗黙的な変換を使用します。(未テスト)の行に沿って何かを試してください:

decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));
于 2009-12-15T10:14:31.020 に答える