在C#中将OracleDecimal转换为System.Double

时间:2011-03-29 08:36:41

标签: c# oracle type-conversion

我在从OracleDecimal转换值时遇到了一些问题。这是代码

public static T GetReaderValue(this OracleDataReader dr, string col) where T : struct
{
    int colNo = dr.GetOrdinal(col);
    var value = (double)OracleDecimal.SetPrecision(dr.GetOracleDecimal(colNo), 28);
    return (T) Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture);
}

这适用于大多数值,但对于某些值,如0.12345,它返回的数字类似于0.123499999999。

任何人都可以提供一些关于如何在没有这些舍入错误的情况下转换OracleDecimal的建议吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

System.Double存储在基数2而不是基数10中。可以使用基数10中的有限位数表示的某些数字在基数2中需要无限数量的数字(反之亦然)。 / p>

由于数据库似乎存储了十进制数字,您最好转换为System.Decimal值,这样就不会失去精度(因为System.Decimal使用基数10的方式与OracleDecimal)。