社区
MS-SQL Server
帖子详情
Float和Decimal的区别
haojialin1981
2010-06-21 08:18:22
我想存入 0.2541 4587.241 这样的浮点数,我字段选哪个类型的比较好啊?
1,Float 2,Decimal
以前一直用float,是不是不好呀? 他精确度不高?
如果我存 10.236525,他这个不精确,是到库里变成10.2365 还是?我不知道,这个不精确指的是什么呀?
是存入所有的数都不精确,无论位数?还是位数多了不精确呀?
Decimal我看也就38位,如果多了,不也不精确了吗?他精确指的是???
...全文
1470
10
打赏
收藏
Float和Decimal的区别
我想存入 0.2541 4587.241 这样的浮点数,我字段选哪个类型的比较好啊? 1,Float 2,Decimal 以前一直用float,是不是不好呀? 他精确度不高? 如果我存 10.236525,他这个不精确,是到库里变成10.2365 还是?我不知道,这个不精确指的是什么呀? 是存入所有的数都不精确,无论位数?还是位数多了不精确呀? Decimal我看也就38位,如果多了,不也不精确了吗?他精确指的是???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
claro
2010-06-21
打赏
举报
回复
帮顶
回复的内容极短!
feilniu
2010-06-21
打赏
举报
回复
float可以表示的范围大,但不精确,且运算性能较低,适合需要大范围数值的科学运算;
decimal可以表示的范围比float小,但精确,适合金融、财务等一般对范围要求较小但对精确性要求高的数据。
haojialin1981
2010-06-21
打赏
举报
回复
我存12.35 ,在float的精确范围内,他能准备存储吗?我是问这个,他能变成12.3499999,或者12.35000001吗?他是怎么变成这个的呀?就是说在float的范围内,他能准备存储不?还是超过他范围了,他不准确呀?
claro
2010-06-21
打赏
举报
回复
建议F1,多看联机丛书。
不完全统计,类ERP系统中,int使用最多,float次之,decimal最少;
类似K3财务系统中,int使用最多,decimal次之,float最少。
--当然以上数据仅供参考,不表示任何个人观点。
SQL77
2010-06-21
打赏
举报
回复
FLOAT 是近似类型,DECIMAL是精确
obuntu
2010-06-21
打赏
举报
回复
float
用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。
所以一般是建议使用decimal,除非你允许不精确的事情发生。
htl258_Tony
2010-06-21
打赏
举报
回复
decimal 数据类型最多可以存储 38 个数字,所有这些数字均可位于小数点后面。decimal 数据类型存储精确的数字表示形式,存储值没有近似值。
定义 decimal 列、变量和参数的两种属性为:
p
指定精度或对象能够支持的数字个数。
s
指定可以放在小数点右边的小数位数或数字个数。
p 和 s 必须遵守规则:0 <= s <= p <= 38。
numeric 和 decimal 数据类型的默认最大精度为 38。在 Transact-SQL 中,numeric 的功能等同于 decimal 数据类型。
当数据值必须严格按指定存储时,可以使用 decimal 数据类型来存储带小数的数字。
有关数学运算如何影响结果的精度和小数位数的详细信息,请参阅精度、小数位数和长度 (Transact-SQL)。
注意:
decimal 和 numeric 数据类型能够以可变长度格式存储,这可能会显著减少存储空间。有关 vardecimal 存储格式的信息,请参阅将 Decimal 数据存储为可变长度类型。
使用 float 和 real 数据
float 和 real 数据类型被称为近似数据类型。float 和 real 的使用遵循有关近似数值数据类型的 IEEE 754 规范。
近似数值数据类型并不存储为许多数字指定的精确值,它们只储存这些值的最近似值。在很多应用程序中,指定值与存储的近似值之间的微小差异并不明显。但有时这些差异也较明显。由于 float 和 real 数据类型的这种近似特性,因此当要求使用精确数值时,比如在财务应用程序、需要舍入的操作或等值核对中,请勿使用这些数据类型。而应使用 integer、decimal、money 或 smallmoney 数据类型。
在 WHERE 子句搜索条件(特别是 = 和 <> 运算符)中,应避免使用 float 列或 real 列。float 列和 real 列最好只限于 > 比较或 < 比较。
IEEE 754 规范提供四种舍入模式:舍入到最近、向上舍入、向下舍入以及舍入到零。Microsoft SQL Server 2005 使用向上舍入。所有的数值都必须精确到确定的精度,但会产生微小的浮点值差异。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条,因此我们不可能可靠地量化浮点值。
float 和 real (Transact-SQL)
用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。
注意:
real 的 SQL-92 同义词为 float(24)。
数据类型 范围 存储
float
-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308
取决于 n 的值
real
-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38
4 字节
Transact-SQL 语法约定
语法
float [ ( n ) ]
其中 n 为用于存储 float 数值尾数的位数,以科学记数法表示,因此可以确定精度和存储大小。如果指定了 n,则它必须是介于 1 和 53 之间的某个值。n 的默认值为 53。
n value 精度 存储大小
1-24
7 位数
4 字节
25-53
15 位数
8 字节
注意:
SQL Server 2005 将 n 视为下列两个可能值之一。如果 1<=n<=24,则将 n 视为 24。如果 25<=n<=53,则将 n 视为 53。
SQL Server float[(n)] 数据类型从 1 到 53 之间的所有 n 值均符合 SQL-92 标准。double precision 的同义词为 float(53)。
decimal 和 numeric (Transact-SQL)
带固定精度和小数位数的数值数据类型。
decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )]
固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。
p(精度)
最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
s(小数位数)
小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。
精度 存储字节数
1 - 9
5
10-19
9
20-28
13
29-38
17
--更多参考联机帮助
Mr_Nice
2010-06-21
打赏
举报
回复
具体还看你要处理什么样的数据。各有用处。
永生天地
2010-06-21
打赏
举报
回复
由于float存储关系,会舍掉小数尾数
decimal能保证精度
claro
2010-06-21
打赏
举报
回复
看需求,个人建议Decimal。
题外话
详细分析sqlserver中的小数类型(
float
和
decimal
)
在SQL Server中实际上只有两种小数数值类型,分别是
float
(近似数值)和
decimal
(精确数值),这两种类型能表示所有的小数数值类型。
float
(近似数值类型)
float
表示的是近似数值,存在一定的精度缺失。
float
(n) 这里的n是以科学计数法存储浮点数尾数的位数,因此此参数决定了精度和存储的大小。其是可选的,默认值是53,即
float
等价于
float
(53),占用8bytes。如果指定了n,则它必须是介于1至53之间的值。实际上,虽然n的取值范围定义是1至53,但实际上
float
只能表示
float
(53)和
float
(24)两种类型,分别占用8bytes和4byte
MySQL中
Decimal
类型和
Float
Double的
区别
(详解)
下面小编就为大家带来一篇MySQL中
Decimal
类型和
Float
Double的
区别
(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
数据库 数据类型
float
到C#类型
decimal
,
float
数据类型转化无效
今天运行系统突然出错,数据类型转化无效,错误在system.data.sqlclient.get_
decimal
()方法,初步估计是数据库的
float
类型转换为c#的
decimal
类型时出错了,实体类使用的是
decimal
?类型,心想就算数据库里的数值是空,也不能出现转换错误啊。 网上百般搜索,很多人遇到类似情况,多数是直接去
float
类型时候出错,如(
float
)dr[0],后来看到有说应该是先转化成double,然后在转化成
float
就可以了 尝试了一下把实体类的
decimal
?类型的字段改成double?类型,OK. 您可能感兴趣的文章
c#中
decimal
,double,
float
的
区别
.doc
c#中
decimal
,double,
float
的
区别
.doc
MySQL中
decimal
类型用法的简单介绍
MySQL中支持浮点数的类型有
FLOAT
、DOUBLE和
DECIMAL
类型,
DECIMAL
类型不同于
FLOAT
和DOUBLE,
DECIMAL
实际是以串存放的。
DECIMAL
可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。如果改变M 而固定D,则其取值范围将随M 的变大而变大。 对于精度比较高的东西,比如money,建议使用
decimal
类型,不要考虑
float
,double, 因为他们容易产生误差,numeric和
decimal
同义,numeric将自动转成
decimal
。
DECIMAL
从MySQL 5.1引入,列的声明语法是
DECIMAL
(M,D)。
MS-SQL Server
34,575
社区成员
254,583
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章