C# C语言中OracleDecimal到System.Double的转换#

C# C语言中OracleDecimal到System.Double的转换#,c#,oracle,type-conversion,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); retur

我在从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.1234999999之类的数字

有人能就如何在不存在这些舍入错误的情况下转换OracleDecimal提供一些建议吗


谢谢

系统。Double
存储在基数2而不是基数10中。有些数字可以用基数为10的有限位数表示,需要基数为2的无限位数(反之亦然)

由于数据库似乎存储的是十进制数,因此最好将其转换为
系统。十进制
值,以免丢失精度(正如
系统。十进制
使用基数10的方式与
OracleDecimal
相同)。

可能重复的