很可能C#计算是在内部完成的 双 C#中的数据类型,而在SQL Server中,计算完成了 DECIMAL SQL Server的数据类型,或SQL Server NUMERIC或REAL等不同的数据类型。
谢谢 约翰吴 我试过用 CLR集成 。为了让C#像乘法一样,我在C#方面开发了如下所示的乘法函数'clrcarpma':
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction] public static SqlString clrCarpma(double x, double y) { double z = x * y; string sz = z.ToString("R"); return new SqlString(sz); } }
然后我将它发布到我的SQL Server数据库。然后我执行它并获得我想要的结果。
select dbo.clrCarpma(1647,0.15)
我得到的结果是247,04999999999998。
这里的问题是不同的系统使用不同的 的 近似值 强> 他们代表实数。
一个 double 要么 decimal 在C#中,不一定以相同的方式表示在另一个系统上。
double
decimal
您唯一的保证是当您使用系统使用的实数的特定表示在一个系统上执行计算时,您将获得相同的结果。
您 的 大概 强> 如果您使用类型,将得到相同的结果 的 两个不同 强> 系统是否实现该类型 的 正确地 强> 有一个已知的 的 标准 强> - 如 IEE浮点 。
但是,即使在相同类型的同一系统上,事情也可能出错。拿这两个 的 在数学上相同 强> 功能:
计算时(在只保留四个最重要的十进制数字的系统上),根据输入,它们可以产生非常不同的结果:
你正在处理 的 近似值 强> 。你会得到的 的 错误 强> 。你最好找出一种方法来计算你需要的结果,使错误无关紧要(如此多)。