存储过程中为啥会丢失小数点前面的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的主要内容,如果未能解决你的问题,请参考以下文章