我从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的建议?

谢谢!

最佳答案

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

由于数据库似乎存储的是十进制数字,所以最好转换为System.Decimal值,这样您就不会损失精度(因为System.Decimal使用与OracleDecimal相同的底数为10)。

关于c# - 在C#中将OracleDecimal转换为System.Double,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5469862/

10-11 04:51