Dapper.net 十进制输出参数不返回精度值

Posted

技术标签:

【中文标题】Dapper.net 十进制输出参数不返回精度值【英文标题】:Dapper.net decimal Output parameters not returning the Precision value 【发布时间】:2016-06-04 15:07:43 【问题描述】:

我使用 Dapper 已经有一段时间了,它是一个很棒的 ORM 映射器。但最近我发现小数作为存储过程的输出参数传递的问题会切断精度并且只返回整数。

var dynamicParam = new DynmaicParam();

dynamicParam.Add("decimalOut",11.25,dbtype.decimal,ParameterDirection.OutPut);
connection.execute("sp1",dynamicParam,commandType.StoredProcedures);    
decimal val = dynamicParam.Get<decimal>("decimalOut");

在这种情况下,val 将是 11,它不会返回 11.25,因为当过程只返回传递时的确切输出参数时。

我们使用了一种变通方法,如下所示,它也返回精度,

var dynamicParam = new DynmaicParam();
dynamicParam.Add("decimalOut",11.25,dbtype.double,ParameterDirection.OutPut);
connection.execute("sp1",dynamicParam,commandType.StoredProcedures);    
decimal val = dynamicParam.Get<dynamic>("decimalOut");

但我仍然认为必须有更好的方法来处理 dapper 中的这些小数精度问题,因为它是一个了不起的 ORM 映射器,它支持许多数据类型。感谢您提供更好的解决方案并提前感谢

【问题讨论】:

H!mm...这很烦人。我希望这是因为参数上没有设置精度和比例。提醒我:它们是否可用作 Add 上的参数? 使用我正在使用的 dapper 版本。比例和精度在 add 中不可用 在此线程下也提出了相同的问题,并且在该线程中,在传递输出参数数据类型时,已接受单一数据类型而不是小数。 ***.com/questions/17613635/… 我得看看这里能做什么;这是有问题的 IMO 你最好的选择是更新库并使用可用的选项。如果您没有一个好的更新库的过程,那么您已经遇到了问题 - 假装它不存在并不能解决它 【参考方案1】:

您需要使用精度和比例。

示例:

dynamicParam.Add("decimalOut",11.25,dbtype.decimal,ParameterDirection.OutPut, precision: 18, scale: 2);

【讨论】:

以上是关于Dapper.net 十进制输出参数不返回精度值的主要内容,如果未能解决你的问题,请参考以下文章

Dapper.net 的奇怪超时问题

printf

C++:怎样使用printf函数,越详细越好

《Lua程序设计》之 数值

C连载18-转换说明,转换说明修饰符sizeof返回类型可移植

python浮点数精度问题