如何将Oracle存储过程返回的OracleDecimal数组转为C#的double数组?
解决OracleDecimal数组转double数组的问题
你无法直接将Oracle.ManagedDataAccess.Types.OracleDecimal[]强制转换为double[],因为这是两种不同类型的数组,必须逐个转换数组中的每个元素。
方法一:使用LINQ快速转换
通过LINQ的Select方法遍历每个OracleDecimal元素,将其转换为double后再生成新数组:
// 先将参数值显式转为OracleDecimal数组 var oracleDecimalArr = (Oracle.ManagedDataAccess.Types.OracleDecimal[])cmd.Parameters["UTILBYDAY"].Value; // 逐个转换为double并生成目标数组 double[] arrUtil = oracleDecimalArr.Select(od => (double)od).ToArray();
方法二:使用for循环转换
如果项目中未使用LINQ,可通过普通循环遍历完成转换:
var oracleDecimalArr = (Oracle.ManagedDataAccess.Types.OracleDecimal[])cmd.Parameters["UTILBYDAY"].Value; double[] arrUtil = new double[oracleDecimalArr.Length]; for (int i = 0; i < oracleDecimalArr.Length; i++) { arrUtil[i] = (double)oracleDecimalArr[i]; }
注意事项
OracleDecimal的精度高于double,转换时可能存在精度损失。如果业务场景对精度要求极高,建议转换为decimal类型,只需将代码中的(double)od替换为(decimal)od即可。
内容的提问来源于stack exchange,提问作者user20774180
相关产品推荐
相关产品推荐

