如何取消数据库库里decimal类型默认的四舍五入如题,要取消掉数据库库里decimal类型默认的四舍五入。如:存进
如何取消数据库库里decimal类型默认的四舍五入
如题,要取消掉数据库库里decimal类型默认的四舍五入。
如:存进去的是12.34 ,最后把该列求和出来的数值为 34.24(用sum求的和) ,都是decimal(18,2)类型,精度位数都给了,但最后显示的还是四舍五入的结果34。如何显示完整的,不要四舍五入之后的结果。
round方法也试了,还是不行。
[最优解释]
试试如下的写法,特别是最后那个 Convert.ToDecimal完全多余。
cmd.Parameters.Add("@..", SqlDbType.Decimal).Scale = 2;
cmd.Parameters["@.."].Direction = ParameterDirection.Output;
Decimal sumMoney = (Decimal)cmd.Parameters["@.."].Value;
[其他解释]
你是什么数据库?我从未发现这种自动四舍五入的现象,难道是你取出来后到实体类的时候,用int类型的属性加载了它?
[其他解释]
decimal是数据类型.18位.没有小数位 .....................
[其他解释]
最后显示的是 34.00
数据库是sqlserver2008
[其他解释]sql 2012没发现有什么问题
是否可以把问题描述详细一点?什么时候变成 34.00 四舍五入的?sql求sum的时候?还是在C#代码里面呢?
[其他解释]哦,数据库里没问题,是在C#代码里。
[其他解释]取出的时候 保留两位没有?
[其他解释]如:存进去的是12.34 ,最后把该列求和出来的数值为 34.24(用sum求的和) ,都是decimal(18,2)类型,精度位数都给了,但最后显示的还是四舍五入的结果34。如何显示完整的,不要四舍五入之后的结果。
看你这描述 。应该不是四舍五入 。 你是不是没有保留两位。 默认输出的。
[其他解释]C#里面是如何取值的呢?
C#里面也有decimal哦
SqlDataReader sdr;
decimal d = sdr.GetDecimal(0);
[其他解释]用cmd.Parameters取的,不能用这个么?
[其他解释]cmd.Parameters是设置sql或存储过程参数用的啊,
除非这个参数是个out参数,才能用这个取值。
[其他解释]Decimal sumMoney = Convert.ToDecimal(cmd.Parameters["@.."].Value);
这个参数是个输出类型
[其他解释]你是存储过程定义出了问题,输出参数定义为了decimal,应该定义为decimal(18,2),这个我在一些代码生成工具里就看到了,他们忽视了这个类型的精度,产生了BUG。
[其他解释]精度都有,数据库里没问题,执行过了,查过了,但到C#代码里就有问题了。
代码如下:
Decimal sumMoney = Convert.ToDecimal(cmd.Parameters["@.."].Value);
参数是输出类型
有问题么?
[其他解释]cmd.Parameters.Add("@..", SqlDbType.Decimal);(这里需要处理下么?)
cmd.Parameters["@.."].Direction = ParameterDirection.Output;
Decimal sumMoney = Convert.ToDecimal(cmd.Parameters["@.."].Value);
[其他解释]谢谢!!!