我在从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的建议吗?
谢谢!
答案 0 :(得分:4)
System.Double
存储在基数2而不是基数10中。可以使用基数10中的有限位数表示的某些数字在基数2中需要无限数量的数字(反之亦然)。 / p>
由于数据库似乎存储了十进制数字,您最好转换为System.Decimal
值,这样就不会失去精度(因为System.Decimal
使用基数10的方式与OracleDecimal
)。