我的数字列设置为(38,19),但我得到了奇怪的算术溢出错误。
工作原理:
1a) INSERT INTO sen.numeric_table VALUES('MaxUBInt', 1844674407370955161);
1b) INSERT INTO sen.numeric_table VALUES('SmallestFloatBy10', 1.175494351e-39);
做什么工作:
2a) INSERT INTO sen.numeric_table VALUES('MaxFloat', 3.402823466e+38);
2b) INSERT INTO sen.numeric_table VALUES('MaxFloatBy10', 3.402823466e+39);
我不明白:
1)该栏目应允许任何不超过38位数的输入,以及小数点后不超过19位的输入。假设这是真的,为什么(1b)在我明显超过38位数字时工作? (以及小数后超过19位的精度)
谢谢!
答案 0 :(得分:0)
根据你在1)和2)中的测试,看起来你正试图使用数字(38,19)数据类型找到int和float的上界以及float的下界。 int范围将由比例因子(19)确定,并且为数值数据类型定义精度边界(见下文)。
根据MSDN,SQL Server的最大精度为-10 ^ 38 +1到10 ^ 38 -1。最低精度将根据NUMERIC_ROUNDABORT
的值进行舍入。
如果这是一个科学应用程序,您可能需要阅读MSDN description of precision, length, and scale,特别是如果您使用存储在数字列中的值执行操作。
答案 1 :(得分:-1)
下溢不会导致SQL服务器出错;它只会围捕。关于它有一些很好的讨论。例如: