存储过程中为啥会丢失小数点前面的0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程中为啥会丢失小数点前面的0相关的知识,希望对你有一定的参考价值。

oracle数据库中,小数如果小于1,那么查询出来后前面的0是不显示的。所以不过是sql直接取出还是存储过程中取出,显示到页面时,都缺少小数点前的0.
解决办法:
通过decode函数
如select decode(substr(percent,1,1),'.','0'||percent,percent) percent
from point;
参考技术A 我只知道Excal的,先在单元格里的最前面打一个英文的单引号就会保留0。

使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例

【中文标题】使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例【英文标题】:Lost decimal precision and scale using LINQ and stored procedure with output parameters 【发布时间】:2009-01-06 19:45:46 【问题描述】:

我有一个使用如下输出参数的存储过程:

ALTER PROCEDURE [GetAmount] 
( 
@orderID [int], 
@totalcost decimal(18,2) OUTPUT 
) 
SELECT @totalcost = cost 
FROM mytable 
WHERE orderID = @orderID 

当我将存储过程拖到设计器上时,designer.cs 文件中生成的代码最终会丢失精度和比例,如下所示:

[Parameter(DbType="Decimal")] ref System.Nullable<decimal> totalcost 

这是一个问题,因为产品价格和订单总数等数据正在四舍五入(即 19.95 变为 20)。

现在,我可以手动更正 .cs 文件,但我必须记住每次进行更新时都要这样做。难道我做错了什么?有没有办法改变我的存储过程,使 LINQ 能够自动检测精度和规模?

【问题讨论】:

【参考方案1】:

我可以手动更正 .cs 文件,但是

对,您需要将此代码移动到一个部分类文件中,在那里编辑映射的精度,然后从设计器中删除存储过程。

这为您提供了映射到存储过程的代码的手动规范。

【讨论】:

【参考方案2】:

你可以使用money类型而不是decial(18,2)类型吗?

【讨论】:

我真的不知道为什么十进制不能正常工作。我应该多玩一些。对不起。

以上是关于存储过程中为啥会丢失小数点前面的0的主要内容,如果未能解决你的问题,请参考以下文章

调用存储过程丢失输出参数小数点后面的数值

使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例

java float double精度为啥会丢失

为啥我的存储过程在包含在事务块中时会抛出错误?

为啥存储过程没有在一个字符串中给出输出并且在 MySql 6.0 上执行的存储过程在 MySql 5.0 上给出错误

为啥要使用存储过程?