我从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/