Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Sql 在SSRS中比较浮点和整数_Sql_Reporting Services_Floating Point_Integer_Reportbuilder3.0 - Fatal编程技术网

Sql 在SSRS中比较浮点和整数

Sql 在SSRS中比较浮点和整数,sql,reporting-services,floating-point,integer,reportbuilder3.0,Sql,Reporting Services,Floating Point,Integer,Reportbuilder3.0,我在一个字段中使用LEN()来计算字符串长度,然后将其与AVG(CONVERT(FLOAT,LEN(some_field))生成的值进行比较 比较的要点是,如果第一个值小于第二个值,则执行此操作,如果值大于,则执行该操作 我的问题是:在比较上述两种数据类型的值时,系统会在哪个小数点处停止使用更多的小数点作为浮点值,然后决定对其进行四舍五入 例如,与9.5相比,比较结果为10。因此,它将选择其中一个选项(不管是哪一个)。但是与9.999999999999相比,10又如何呢?系统是否会判定9.999

我在一个字段中使用
LEN()
来计算字符串长度,然后将其与
AVG(CONVERT(FLOAT,LEN(some_field))
生成的值进行比较

比较的要点是,如果第一个值小于第二个值,则执行此操作,如果值大于,则执行该操作

我的问题是:在比较上述两种数据类型的值时,系统会在哪个小数点处停止使用更多的小数点作为浮点值,然后决定对其进行四舍五入


例如,与
9.5
相比,比较结果为
10
。因此,它将选择其中一个选项(不管是哪一个)。但是与
9.999999999999
相比,
10
又如何呢?系统是否会判定
9.999999999999999
实际上是
10
,从而破坏比较点

回答这个问题需要两个部分

在比较上述两种数据类型的值时,系统会在哪个小数点处停止对浮点值使用更多的小数点,然后决定对其进行四舍五入

浮点数舍入或截断的限制基于该数据类型的系统精度。对于a,它最多为15位

以您的代码为例,如果您有11个总长度为29的字符串,
AVG
将返回:2.6364(一个非终止的重复数字),终止于第15位

如果您尝试将9.999999999999999表示为浮点数,它将四舍五入为10

我使用LEN()计算字符串长度,然后将其与AVG(CONVERT(FLOAT,LEN(some_field))生成的值进行比较

但是10和9.99999999999相比呢?系统是否会判定9.999999999999实际上是10,从而破坏比较点

首先,请记住,
AVG()
返回类型基于参数的数据类型(请参阅中的“返回类型”部分),并且由于要将
LEN(某些字段)
值显式转换为浮点值,因此
AVG()
结果将始终是浮点值。如果需要更高的精度和比例,比如9.9999999999999999,考虑将参数转换为<代码>十进制< /代码>。< /P>
其次,由于
LEN()
返回的值类型为
int
,而
AVG()
返回的值可能不是上面提到的
int
,因此,您的比较是在两种不同数据类型的值之间进行的,并发挥作用。

回答这个问题需要两个部分

在比较上述两种数据类型的值时,系统会在哪个小数点处停止对浮点值使用更多的小数点,然后决定对其进行四舍五入

浮点数舍入或截断的限制基于该数据类型的系统精度。对于a,它最多为15位

以您的代码为例,如果您有11个总长度为29的字符串,
AVG
将返回:2.6364(一个非终止的重复数字),终止于第15位

如果您尝试将9.999999999999999表示为浮点数,它将四舍五入为10

我使用LEN()计算字符串长度,然后将其与AVG(CONVERT(FLOAT,LEN(some_field))生成的值进行比较

但是10和9.99999999999相比呢?系统是否会判定9.999999999999实际上是10,从而破坏比较点

首先,请记住,
AVG()
返回类型基于参数的数据类型(请参阅中的“返回类型”部分),并且由于要将
LEN(某些字段)
值显式转换为浮点值,因此
AVG()
结果将始终是浮点值。如果需要更高的精度和比例,比如9.9999999999999999,考虑将参数转换为<代码>十进制< /代码>。< /P> 其次,由于
LEN()
返回的值类型为
int
,而
AVG()
返回的值可能不是上面提到的
int
,因此您的比较是在两种不同数据类型的值之间进行的,并发挥作用