2011-06-23 34 views
12

在.NET,当我添加两个SqlDecimals,像这样:添加两个.NET SqlDecimals提高精度?

SqlDecimal s1 = new SqlDecimal(1); 
SqlDecimal s2 = new SqlDecimal(1); 
SqlDecimal s3 = s1 + s2; 

然后S3具有精度2,而s1和s2都具有精度1.

这似乎奇数,特别是随着文档状态加法运算符的返回值是“一个新的SqlDecimal结构,其Value属性包含总和”。即根据文件,添加不应该改变精度。

我在这里错过了什么吗?这是预期的行为?

干杯,

蒂尔曼

+0

通常在添加两个浮点值的情况下,结果是双重考虑溢出。所以,看起来奇怪的是,它并不奇怪,在正确的背景下,它具有很大的意义。 –

+0

谢谢了,在重读'精度'的定义之后,它实际上有了更多的意义......然后,不应该将加法运算考虑到实际值,而只是在必要时调整精度? – user812775

回答

4

This article(http://msdn.microsoft.com/en-us/library/ms190476.aspx)解释了SQL类型的行为,我承担。 NET Sql数据类型反映了他们的行为。

+0

谢谢,这实际上是有道理的:) – user812775

3

我发现这种行为正常。

Precision被定义为的用于表示Value属性的最大位数。

两个SqlDecimal号码的总和Precision等于1是包含在[-10,10]中的数字。在这种情况下,要求的最大值Precision2