C# 保存添加额外的小数位

C# 保存添加额外的小数位,c#,.net,entity-framework,decimal,savechanges,C#,.net,Entity Framework,Decimal,Savechanges,我有一个定义为十进制(9,9)的数据库字段。C#中的edmx模型将此字段映射为精度和比例为9的十进制变量 我把数字5放在变量中。我可以检查的地方都显示值为5(在局部变量、实体类实例、数据上下文等中) 在执行DataContex.SaveChanges()时,该值被转换为“5.000000000”。据我所知,实体框架在试图保存到数据库之前,会向值中添加9个小数位。这会导致错误,因为该值现在有太多的数字 有人知道是什么导致了这种行为,以及我如何改变它吗 添加信息-我从在Microsoft SQL 2

我有一个定义为十进制(9,9)的数据库字段。C#中的edmx模型将此字段映射为精度和比例为9的十进制变量

我把数字5放在变量中。我可以检查的地方都显示值为5(在局部变量、实体类实例、数据上下文等中)

在执行
DataContex.SaveChanges()
时,该值被转换为“5.000000000”。据我所知,实体框架在试图保存到数据库之前,会向值中添加9个小数位。这会导致错误,因为该值现在有太多的数字

有人知道是什么导致了这种行为,以及我如何改变它吗


添加信息-我从在Microsoft SQL 2008 R2中创建数据库开始。然后,我从数据库中生成了实体框架模型。

这不是实体框架特有的,而是预期精度为9的小数点(映射回数据库)。因此,输入5时,由于数据的定义方式,0将添加到小数点后


这是在.NET1.1中实现的,以符合一个标准(我忘了是哪一个)。出于显示目的,您可以始终使用Math.Round来删除精度级别(或根据实际需要以不同方式定义数据)。

如果您在数据库中将数据类型定义为
十进制(9,9)
,则会出现问题。
根据,第一个数字是总位数,第二个数字是小数点右侧的位数。
因此,在这样的字段中,您只能以
.123456789
的格式存储1以下的数字。
如果需要存储5,则需要另一种格式。

精度级别已四舍五入为C。额外的数字(小数点右侧)在保存时添加。我无法删除C中的任何内容,因为该值仅显示为5(没有小数点或额外数字)。@JeremyLund-您可以通过此处链接中的信息覆盖精度:。我无法直接回答您的评论,因为我从未遇到过这种特殊情况。感谢您的建议,但我首先使用模型,模型已经包含与数据库匹配的精度和比例(9,9)的正确属性。这就是为什么我如此恼火,以至于它超出了定义的精度和比例。对于显示,最好使用格式字符串而不是数学。round是否将5另存为字符串?还是十进制?或int?在程序中,我输入了一个值5.0。在Visual Studio中检查变量会显示“十进制”值5。@abatishchev如果您说的是数字文字,那么5.0是双精度的,但5.0m是十进制的。@phoog:谢谢您的更正。你说得对。参考页面将这些值列为“最大”值,我将其理解为可能的限制,而不是所需的数量。我把它改成了“十进制(9,4)”,一切正常。我把你的答复记为“回信人”。谢谢。是的,当您这样阅读参考页时,它是不明确的,但是在SQL中,decimal实际上是一种定点类型(与C#的decimal相反,后者更灵活)。