c# - Oracle 数字到 C# 十进制

标签 c# oracle decimal odp.net overflowexception

我知道互联网上有很多关于这个问题的帖子和帖子,我已经阅读了它们(不是每篇文章,我不得不承认)但没有一个能让我完全满意。

我的情况:
我正在使用 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/

相关文章:

r - 从 r 中的数字中提取数字

python - 如何在python中将 float 转换为定点小数

c# - SQlBulkCopy 数据源中DateTime类型的给定值无法转换为指定目标列的int类型

java - Oracle 查询到 Hibernate 查询的转换

java - 如何在不从 OracleDB 获取 "Expected NUMBER but got BINARY"的情况下查询 Long 值中的空值?

django - 如何针对 oracle 中的不同模式运行检查数据库?

javascript - jquery - toFixed 但不是 toFixed

c# - 如何在 TreeView 中找到根节点

c# - Windows 窗体 : How to directly bind a Bitmap to a PictureBox?

c# - 当一个为空时比较整数和默认比较为真