Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 将int转换为real有什么限制_Sql Server_Tsql_Casting - Fatal编程技术网

Sql server 将int转换为real有什么限制

Sql server 将int转换为real有什么限制,sql-server,tsql,casting,Sql Server,Tsql,Casting,当我写作时: 选择强制转换(强制转换(32652317为实数)为int) 结果是: 32652316 在类型为real的列中安全存储的最大整数是多少而不会有错误值的风险?只是为了好玩: 以下代码将返回第一个数字,其中您的演员阵容与原始数字不同 WITH x AS(SELECT 1 AS N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS tbl(N))--10^1 ,N3 AS (SELECT 1 AS N FROM x C

当我写作时:

选择强制转换(强制转换(32652317为实数)为int)

结果是:

32652316
在类型为
real
的列中安全存储的最大整数是多少而不会有错误值的风险?

只是为了好玩:

以下代码将返回第一个数字,其中您的演员阵容与原始数字不同

WITH x AS(SELECT 1 AS N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS tbl(N))--10^1
    ,N3 AS (SELECT 1 AS N FROM x CROSS JOIN x AS N2 CROSS JOIN x N3) --10^3
    ,Tally AS(SELECT (ROW_NUMBER() OVER(ORDER BY(SELECT NULL))) AS Nr FROM N3 
              CROSS JOIN N3 N6 CROSS JOIN N3 AS N9)
SELECT TOP 1 Nr,CAST (CAST (Tally.Nr AS REAL) AS INT)
FROM Tally
WHERE Nr<>CAST (CAST (Tally.Nr AS REAL) AS INT);
我的结果是
67108867和67108864

要求
>5
我得到了
134217734和134217728

更新:浮动与真实 如果将
REAL
替换为
FLOAT
,则不允许有任何中断强制转换的INT,但这需要8字节的存储空间

根据
REAL
被视为
FLOAT(24)
占用4个字节。32位中的24位用于尾数
FLOAT
需要一个
INT
-参数来设置其宽度<代码>浮动(24)远低于最大宽度。省略此参数默认为最大值53,但需要8个字节

即使使用
FLOAT(1)
也至少为尾数保留1位。当第7个字节“开始”时,四舍五入开始。这发生在16777217以下的1个数字:

只是为了好玩:

以下代码将返回第一个数字,其中您的演员阵容与原始数字不同

WITH x AS(SELECT 1 AS N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS tbl(N))--10^1
    ,N3 AS (SELECT 1 AS N FROM x CROSS JOIN x AS N2 CROSS JOIN x N3) --10^3
    ,Tally AS(SELECT (ROW_NUMBER() OVER(ORDER BY(SELECT NULL))) AS Nr FROM N3 
              CROSS JOIN N3 N6 CROSS JOIN N3 AS N9)
SELECT TOP 1 Nr,CAST (CAST (Tally.Nr AS REAL) AS INT)
FROM Tally
WHERE Nr<>CAST (CAST (Tally.Nr AS REAL) AS INT);
我的结果是
67108867和67108864

要求
>5
我得到了
134217734和134217728

更新:浮动与真实 如果将
REAL
替换为
FLOAT
,则不允许有任何中断强制转换的INT,但这需要8字节的存储空间

根据
REAL
被视为
FLOAT(24)
占用4个字节。32位中的24位用于尾数
FLOAT
需要一个
INT
-参数来设置其宽度<代码>浮动(24)远低于最大宽度。省略此参数默认为最大值53,但需要8个字节

即使使用
FLOAT(1)
也至少为尾数保留1位。当第7个字节“开始”时,四舍五入开始。这发生在16777217以下的1个数字:



使用
REAL
FLOAT
时,总有不出错的风险,但有时会出现意外结果。。。您是否有充分的理由使用
REAL
?@Shnugo-我们也需要担心整数部分吗?@Shungo我需要最小化存储空间&大多数值都很低,只有2位小数,但有些更大integers@VojtěchDohnal嗯,在大多数情况下,数字需要精确。用
REAL
你永远不知道你会得到什么。。。顺便说一句:如果我的答案解决了你最初的问题,那就接受它吧。谢谢!使用
REAL
FLOAT
时,总有不出错的风险,但有时会出现意外的结果。。。您是否有充分的理由使用
REAL
?@Shnugo-我们也需要担心整数部分吗?@Shungo我需要最小化存储空间&大多数值都很低,只有2位小数,但有些更大integers@VojtěchDohnal嗯,在大多数情况下,数字需要精确。用
REAL
你永远不知道你会得到什么。。。顺便说一句:如果我的答案解决了你最初的问题,那就接受它吧。谢谢!伟大的永远不知道这一点,所以real只能安全地存储高达16777215(0xFFFFFF)的三字节整数,因为根据IEEE 754 single,指数需要8位?@VojtěchDohnal有多少行?你说:大多数值都是2位小数的低位,但有些是更大的整数。你期望的最大整数是多少,最小整数是多少?尝试使用
十进制(10,2)
。这将保留在8字节的存储空间内,最多42949672字节。(用
DATALENGTH
进行经验测试)@Shungo很快就会有数百万行。这就是为什么我想坚持使用4字节的实数。整数值是传送带上每120秒的重量,单位为kg,因此它不是cca max 100000的精确数字,所以应该可以。@VojtěchDohnal好吧,老实说:我不会为光盘存储而烦恼!特别是对于许多行,如果您只是为了节省以后的存储空间而尝试调皮,您将遇到更大的麻烦。在几乎所有情况下,使用适当的数据类型都是值得的。我坚持使用十进制(X,2)(X设置得足够大以满足您的需要)。太好了。。。永远不知道这一点,所以real只能安全地存储高达16777215(0xFFFFFF)的三字节整数,因为根据IEEE 754 single,指数需要8位?@VojtěchDohnal有多少行?你说:大多数值都是2位小数的低位,但有些是更大的整数。你期望的最大整数是多少,最小整数是多少?尝试使用
十进制(10,2)
。这将保留在8字节的存储空间内,最多42949672字节。(用
DATALENGTH
进行经验测试)@Shungo很快就会有数百万行。这就是为什么我想坚持使用4字节的实数。整数值是传送带上每120秒的重量,单位为kg,因此它不是cca max 100000的精确数字,所以应该可以。@VojtěchDohnal好吧,老实说:我不会为光盘存储而烦恼!特别是对于许多行,如果您只是为了节省以后的存储空间而尝试调皮,您将遇到更大的麻烦。在几乎所有情况下,使用适当的数据类型都是值得的。我坚持使用十进制(X,2)(X设置得足够大以满足您的需要)。