![]() |
1
9
SQL Server使用尽可能小的数据类型。 运行此脚本时
您将看到SQL Server隐式地使用了数字(2,1)数据类型。
编辑 从SQL Server联机丛书中获取 Data Type Conversion
|
![]() |
2
4
是的,您经常需要对它们进行铸造以获得更好的精度。我的看法是: |
![]() |
3
3
我认为应该理解幕后发生的事情,以便在类似情况下将来参考。 带小数点(不包括科学记数法)的文字数字值表示十进制数据类型,该数据类型存储为尽可能小的十进制类型。与Lieven Keersmaekers的报价相同: https://msdn.microsoft.com/en-us/library/ms191530%28SQL.90%29.aspx#_decimal
小数点右边的尾随零指定小数位数。小数点左边的前导零将被忽略。 一些例子:
另一个需要考虑的问题是 Data Type precedence . 当一个运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定将优先级较低的数据类型转换为优先级较高的数据类型。 还有一个需要考虑的问题是,如果我们对十进制类型进行算术运算,那么得到的十进制类型,即精度和小数位数都依赖于操作数和运算本身。文档中对此进行了描述 Precision, Scale, and Length . 所以,你的表达式的一部分在括号里
使用上面关于十进制表达式的精度和小数位数的规则。此外,还使用银行的四舍五入或四舍五入为偶数。需要注意的是,使用的小数和浮点类型的舍入不同。 如果我们继续表达
因此,这种差异的部分原因是小数类型的舍入与浮点类型的舍入不同。 根据上述规则,只使用一个内圆括号就足够了。根据数据类型优先规则,其他所有文字都将提升为浮动。
还有一件更重要的事。即使这个float表达式也不能计算精确的结果。正因为如此,前端(SSMS或其他)将值舍入到(我猜)精度6位,然后截断尾随的零。因此,即1.000001变为1。 很简单,不是吗? |
![]() |
4
0
要编写常量浮点表达式,请尝试使用科学记数法:
结果是60。 |
![]() |
Denis · 双精度C++,308位数字或15位数字? 3 年前 |
![]() |
nellapizza · python楼层划分操作符是如何实现的? 7 年前 |
![]() |
comte · 如何在SQL数据库中存储python浮点 7 年前 |
![]() |
user2255757 · 如何正确分配cuda半精度阵列? 7 年前 |
![]() |
Hari · 除以2后的结果与乘以0.5后的结果之差 7 年前 |
![]() |
gansub · Newton Raphson迭代-无法迭代 7 年前 |
![]() |
Alex · 任意精度的numpy数组(10位int) 7 年前 |