Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提高公式的精度';结果是TSQL_C#_Sql_Sql Server_Tsql - Fatal编程技术网

C# 提高公式的精度';结果是TSQL

C# 提高公式的精度';结果是TSQL,c#,sql,sql-server,tsql,C#,Sql,Sql Server,Tsql,我正在尝试将计算从C#迁移到TSQL,但在达到所需的精度水平时遇到了一些困难。插入了一些问题变量的公式示例如下: (6.4+(10-6.4)*0.5)*0.75 当我在C#中执行此命令时,我会得到结果6.1499999995。 但是,如果我在TSQL中选择它,它将四舍五入到6.1500 有没有办法在TSQL中实现更高级别的精度?您可以 CAST(X AS DECIMAL(y,s)) 其中X为列,y为精度。38是您可以使用的最大预测值。s是小数点右侧的值数 谢谢你的建议。你知道我该怎么用这个来得

我正在尝试将计算从C#迁移到TSQL,但在达到所需的精度水平时遇到了一些困难。插入了一些问题变量的公式示例如下:

(6.4+(10-6.4)*0.5)*0.75

当我在C#中执行此命令时,我会得到结果
6.1499999995
。 但是,如果我在TSQL中选择它,它将四舍五入到
6.1500

有没有办法在TSQL中实现更高级别的精度?

您可以

CAST(X AS DECIMAL(y,s))
其中X为列,y为精度。38是您可以使用的最大预测值。s是小数点右侧的值数


谢谢你的建议。你知道我该怎么用这个来得到我想要的结果吗?我尝试将每个变量转换为十进制,但没有成功。更简单的方法
也没有选择CAST((6.4+(10-6.4)*0.5)*0.75)作为十进制(38,37))
我无法测试atm,但我只是在答案中添加了第二个参数,它定义了小数点右侧的值的数量。你能试着用你想要的s值来转换第一个值吗?我想这应该会使整个语句变成十进制。我已经尝试过用第二个变量来转换整个公式(
decimal(38,37)
)。当你说“你能尝试转换第一个值吗?”你的意思是6.4吗?是的,这就是我的意思。然而,仅仅在纸上计算:6.15应该是更精确的结果,不是吗?你可以尝试在你的C#代码中使用十进制类型,只是在你的代码中使用6.4m而不是6.4。我认为SQL Server的答案是正确的。我很高兴承认这一点。问题是我正在实现的计算需要C#风格的结果。C#中的数据类型是什么?如果在C#中使用浮点类型,则不准确。始终使用十进制。顺便说一句,没有除法(/)在你的陈述中,那么为什么你认为6.149999999是正确的?!我不认为我所瞄准的数字更准确。但是我确实需要得到这个数字,因为我试图复制的算法假设了c#/javascript风格的不准确。也许有一天,我会在事件响应和安全团队论坛上有足够的吸引力来提出一个更好的方法。但在此之前,我一直在寻找一种方法,使sql在本例中的行为更像c#/javascript。