pri*_*kar 299 sql sql-server types
我在谷歌搜索过,还访问了十进制和数字以及SQL Server Helper,以收集数字,浮点数和十进制数据类型之间的差异,并找出应该在哪种情况下使用哪一个.
对于任何类型的金融交易(例如薪资领域),哪一个是首选的,为什么?
Ima*_*idi 454
仅当十进制(最多38位)提供的精度不足时才使用float或real数据类型
所以一般来说,如果您的数字可以适合,则十进制提供的精度为[10E38~38位],而Float的较小存储空间(可能速度)并不重要,处理异常行为和近似数字类型的问题不是可以接受,一般使用十进制.
更有用的信息
主要来源: MCTS Self-Paced Training Kit(考试70-433):Microsoft®SQLServer®2008数据库开发 - 第3章 - 表,数据类型和声明性数据完整性第1课 - 选择数据类型(指南) - 第93页
kmo*_*ote 24
MSDN指南:使用decimal,float和real数据
数字和十进制数据类型的默认最大精度为38.在Transact-SQL中,numeric在功能上等效于十进制数据类型.当数据值必须严格按照指定存储时,使用十进制数据类型存储带小数的数字.
float和real的行为遵循IEEE 754规范对近似数值数据类型的要求.由于float和实际数据类型的近似性质,当需要精确的数字行为时,不要使用这些数据类型,例如在财务应用程序,涉及舍入的操作或相等检查中.而是使用整数,小数,金钱或小数据数据类型.避免在WHERE子句搜索条件中使用float或real列,尤其是=和<>运算符.最好将浮点数和实数列限制为>或<比较.
A-K*_*A-K 13
不是一个完整的答案,而是一个有用的链接:
"我经常对十进制值进行计算.在某些情况下,在进行任何计算之前,将十进制值投射到ASAP,会产生更好的准确性."
Ste*_*han 11
十进制和数字在功能上是相同的,但仍然存在数据类型优先级,这在某些情况下可能是至关重要的.
SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')
Run Code Online (Sandbox Code Playgroud)
生成的数据类型是数字,因为它采用数据类型优先级.
按优先级排列的详尽数据类型列表:
Decimal具有固定的精度,而float具有可变的精度.
编辑(无法读取整个问题):Float(53)(又名真实)是SQL Server中的双精度(32位)浮点数.Regular Float是单精度浮点数.对于大量计算,Double是精确和简单的良好组合.您可以使用十进制创建一个非常高精度的数字 - 最多136位 - 但您还必须注意正确定义精度和比例,以便它可以包含所有中间计算到必要的位数.
Float是 Approximate-number 数据类型,这意味着并非数据类型范围内的所有值都可以精确表示。
Decimal/Numeric是 Fixed-Precision 数据类型,这意味着数据类型范围内的所有值都可以精确地表示为精度和小数位数。您可以使用十进制来省钱。
从 Decimal 或 Numeric 转换为浮点数可能会导致一些精度损失。对于小数或数字数据类型,SQL Server 将精度和小数位数的每个特定组合视为不同的数据类型。DECIMAL(2,2) 和 DECIMAL(2,4) 是不同的数据类型。这意味着 11.22 和 11.2222 是不同的类型,尽管浮点数不是这种情况。对于 FLOAT(6) 11.22 和 11.2222 是相同的数据类型。
你也可以用钱数据类型来省钱。这是具有 4 位货币精度的本机数据类型。大多数专家更喜欢这种数据类型以节省资金。
它的潜在需求是什么?
它源于这样一个事实:最终,计算机在内部以二进制格式表示数字。这不可避免地导致四舍五入错误。
考虑一下:
0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
Run Code Online (Sandbox Code Playgroud)
上面的省略号 [...] 表示“无限”。仔细看,有一个无限重复的图案(='0011')
因此,在某些时候,计算机必须舍入该值。这会导致由于重复使用不准确存储的数字而导致的累积错误。
假设您要存储财务金额(可能有小数部分的数字)。首先,您显然不能使用整数(整数没有小数部分)。从纯数学的角度来看,自然的趋势是使用float
. 但是,在计算机中,浮点数具有位于小数点后的数字部分 - “尾数” - 有限。这会导致舍入错误。
为了克服这个问题,计算机提供了特定的数据类型来限制计算机中十进制数的二进制舍入误差。这些是绝对应该用于表示财务金额的数据类型。这些数据类型通常以Decimal
. 例如,在 C# 中就是这种情况。或者,DECIMAL
在大多数数据库中。
归档时间: |
|
查看次数: |
672512 次 |
最近记录: |