我知道互联网上有很多关于这个问题的帖子和帖子,我已经阅读了它们(不是每篇文章,我不得不承认)但没有一个能让我完全满意。
我的情况:
我正在使用 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,000000000000000000000000000000000000000000000000000000000E-126”
decimal.TryParse(oraReader.GetOracleValue(0).ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
现在我必须找到一些方法来正确地检索和评估这个值 - 数据库也被我无法控制的其他应用程序使用,因此不可能进行更改。
将我的 C# 代码中的类型从“十进制”转换为“ double ”也不是真正的选择。
有什么想法吗?
最佳答案
OracleDecimal 的精度高于 decimal。因此,您必须先降低精度。忘记所有解析,使用隐式转换。尝试以下方式(未经测试):
decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));
关于c# - Oracle 数字到 C# 十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906361/