转换"十进制或数字"时失去精度/溢出的原因数据类型

时间:2017-03-08 11:49:32

标签: sql sql-server tsql

我目前正在学习"数字" MSDN上的数据类型并遇到以下短语。

  

从十进制或数字转换为float或real可能会导致一些问题   精度损失。从int,smallint,tinyint,float转换,   真实的,金钱的或小的金币可以导致十进制或数字   溢出。

在转换"十进制或数字"时,我真的不明白丢失精度/溢出的原因。数据类型。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:1)

每种不同类型的数字表示具有不同的存储量。一个简单的例子是使用int和tinyint。

tinyint有2个字节的存储空间,因此可以容纳最大值32,767。 int有4个字节,因此可以保持最大值2,147,483,647。

如果您尝试将int转换为tinyint,并且int的值大于tinyint的限制(> 32,767),那么您将遇到问题。有些语言会回绕,有些语言会溢出。

答案 1 :(得分:1)

documentation清楚地涵盖了它。

  

用于浮点数字的近似数字数据类型   数据。浮点数据是近似值;因此,并非所有的价值观   数据类型范围可以准确表示。

.NET或任何框架中的浮动数字将是近似数字数据类型。

答案 2 :(得分:1)

十进制或数字数据类型实际上是带小数分隔符位置的整数。 它们可以将每个值存储在最小值和最大值之间,与声明的精度相关。正如Ryan所说,你可以在-32k到32k之间的四个字节内存储大约64k个不同的值。如果你使用四字节浮点类型,范围会更宽,但仍然存储 64k不同值。 该范围内的某些值无法精确存储。