关于.net 保存 decimal类型数据到SQLServer2012数据库时自动取整的问题

公司同事问我有没有遇到过decimal类型数据入库时,会自动取整的问题(比如12.3入库后值是12,12.8入库后值是13,入库后自动四舍五入自动取整);

之前就遇到过从数据去decimal类型数据时,会自动取整的问题;我想应该是同样的问题吧,叫同事设置SQLParameter参数时,设置Scale=2,Precision=18;类似代码如下:

var param1 = new SqlParameter("@Money",System.Data.SqlDbType.Decimal);
            param1.Precision = 18;
            param1.Scale = 2;
            param1.Value = model.Money;

按照上面设置后,我同事说保存到数据库还是自动取整了,我就纳闷了。没办法只能去他那里调试跟踪一下。

看看到底是哪里取整,跟到入库前的一个参数,值都是没有取整,都是原值,就是入库后值才自动取整的。上网搜了一下问题,没有搜到有用的答案。

后来看表的结构才知道,建表的时候,Money字段decimal类型,没有设置小数位,所有每次保存入库都会被自动取整,把字段类型改成decimal(18,2),问题解决。

补充一句:真心坑……写个随笔记录一下,坑坑的问题。

时间: 2024-08-06 15:59:56

关于.net 保存 decimal类型数据到SQLServer2012数据库时自动取整的问题的相关文章

使Decimal类型数据保留N位小数且不进行四舍五入操作(C#)

一 问题描述 开发中,需要使Decimal类型数据保留小数点后的两位小数且不需要进行四舍五入操作,即直接截取小数点后面的两位小数即可.例如:1.245M --> 1.24,而不是1.25 使用Decimal.Round()方法可以实现保留Decimal类型数据小数点后的若干位小数,但是该方法会进行四舍五入操作,而不是直接截取.所以,该方法不可取,在网上搜寻一番也没有找到合适的方法,便自己实现了一个截取Decimal类型数据小数点后若干位的方法. 二 详细的实现代码 using System; n

decimal类型数据如何保留两位小数

日常开发中,decimal作为货币类型,经常会处理保留两位小数的问题. 本站整理两种,decimal类型保留两位小数的方法. 第一种: decimal d = 46.28111m;string res=d.ToString(“#0.00”); //结果=46.28 第二种: double d=45.123456;string res=double.Parse(String.Format(“{0:N}”, d)).ToString(); //结果=45.12 转载请注明:三只源码 » decima

NSUserDefaults保存各种类型数据

一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,也是大家喜欢用它保存简单数据的一个主要原因. 使用 NSUserDefaults 存储自定义对象的最初,我们必须认识NSUserDefaults可以存储哪一些类型的数据,下面一一列出: NSUserDefaults支持的数据类型有:NSNumber(NSInteger.float.doubl

微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG

开篇介绍 这是今天在帮别人看一个 2008R2 版本的项目时发现的一个 Bug,这个 Bug 在 SQL SERVER 2012 有的版本中可能已经解决,但在论坛上看到有的仍然存在. 在 SQL SERVER 2008 R2 版本中,比如从一个数据库表中取一个 BIGINT 类型的数据,赋值给一个 Int64 类型的变量,按照我们的理解肯定是正确的. 但是结果是报错了 - 错误原因:类型不一致造成的. [Execute SQL Task] Error: An error occurred whi

.NET 调用java webservice保存datetime类型数据为空的解决办法

问题描述:       用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到 string类型的属性值,却不能得到int类型.double和DateTime类型的值(在服务端得到的均为null) 问题原因:        VS封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象,则会对该对象的非string属性同时生成 两个属性,一般是这样的"属性××"."

mysql insert 空字符报错 double类型字段插入空字符串时自动转为0

这样写就会报错:Data truncated for column 'x1' at row 1这种应该是版本问题,尤其是虚拟主机.把''改成null不会出错:x1是double类型的数据. INSERT INTO TEMPTABLE(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x3

解决使用DbContext保存Decimal数据时总是保留小数位2位问题

通过System.Data.Entity.DbContext保留Decimal类型数据时,默认只保留小数位2位.要解决该问题,可以通过在OnModelCreating事件中添加相应代码即可,具体参考如下代码中将shop.Longitude设置为小数位20位: public class UserDbContext : System.Data.Entity.DbContext { public UserDbContext() : base("MyContext") { this.Confi

设置EntityFramework中decimal类型数据精度

EF中默认的decimal数据精度为两位数,当我们数据库设置的精度大于2时,EF将只会保留到2为精度. e.g. 2.1999将会被保存为2.20 网上找到常见的方法为重写DbContext的OnModelCreating方法: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Product>().Property(x => x.Price).HasPre

设置EntityFramework中decimal类型数据精度问题(EF默认将只会保留到2为精度)

原文:设置EntityFramework中decimal类型数据精度 EF中默认的decimal数据精度为两位数,当我们数据库设置的精度大于2时,EF将只会保留到2为精度. e.g. 2.19990将会被保存为2.20 1.解决方案一是网上找到常见的方法为重写DbContext的OnModelCreating方法: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<