社区
其他数据库
帖子详情
Interbase中的浮点数的处理问题
HappyLifqd
2003-12-17 03:32:34
我现在正在使用Interbase,可是现在我遇到了如何处理Interbase的问题,描述如下:我定义了一个Numeric类型的的字段,但我输入的1.21,它会出现1.21000000212的值,这是怎么回事,请问各位大侠,这种问题该如何解决
...全文
94
6
打赏
收藏
Interbase中的浮点数的处理问题
我现在正在使用Interbase,可是现在我遇到了如何处理Interbase的问题,描述如下:我定义了一个Numeric类型的的字段,但我输入的1.21,它会出现1.21000000212的值,这是怎么回事,请问各位大侠,这种问题该如何解决
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
HappyLifqd
2003-12-19
打赏
举报
回复
谢谢康先生的帮忙,我用的是IBEXPERT,可能是它的问题,它不管你将NUMERIC怎么设置,都不会正确的显示,这可能是它本身的问题吧
剑雷
2003-12-18
打赏
举报
回复
将SQL Dialect设为3
CuteBit
2003-12-18
打赏
举报
回复
hi,HappyLifqd(姜福寿)
我给你详细解释一下.
数字在计算机中表达有两种方式:定点和浮点
定点数是使用 int/int64 来表达一个数字.这样的表达精确,但相对范围小.比如很多数据库中支持的 Currency 类型就是使用定点方式存储的.在 ib/fb 中,没有直接支持这个类型,但它对其实就是 Numeric 类型做了处理.当 Numeric(d,y) d <= 9/12 (具体是 9 还是 12 受数据库 Dialect 影响,因为 Dialect=3 支持 bigint 也就是 int64 类型,所以它的定点数范围要大,达到 12.注意,客户端连接时选择 3 ,数据库也必须是 Dialect = 3 时 Dialect = 3 的新特性才生效.如果,客户端 = 1,数据库是3,在操作有 Numeric(12,X)/bigint/datetime 等类型的数据是被提示:Client SQL dialect 1 does not support reference to bigint/datetime datatype 类似的错误),其实也和 Currency 是一样的.
浮点数是使用 IEEE 定义的表达方式存储数字.它的范围很广.但存在精度问题(要了解为什么,请查阅浮点数存储的原理).数据库中 DOUBLE PRECISION/FLOAT 这样的类型就是浮点存储的.在 ib/fb 中,Numeric(D,X) 当 D 大于一定数字比如 15 ,ib/fb 自动使用浮点存储.
我的数据表定义
FLD1 DOUBLE PRECISION Nullable
FLD NUMERIC(10, 2) Nullable
FLD2 FLOAT Nullable
在 isql 中显示
FLD1 FLD FLD2
======================= ===================== ==============
1.210000000000000 1.21 1.2100000
fld2 显示正确是因为 isql 知道处理了 float 字段.
但在 SQL Explorer<delphi/bcb 中的一个工具>就没有这么走运了.
FLD1 FLD FLD2
======================= ===================== ==============
1.210000000000000 1.21 1.21000003814697
因为 VCL 中的 TField(SQL Explorer 是 delphi/bcb 编写的) 使用 double 来处理 float.
BTW: 要查看数据库的 Dialect 用 gstat -h 的命令;修改 Dialect 用 gfix -sql_dialect 命令.
HappyLifqd
2003-12-18
打赏
举报
回复
康先生,你好,你说的这两个办法我都试过了,还不行,首先,谢谢你的帮忙,其次,我想再请问一下,有没有别的办法,或者如果要比较两上浮点数的大小,应该如何操作,谢谢
HappyLifqd
2003-12-18
打赏
举报
回复
将SQL Dialect设为3,我现在设的就是Dialect 3
CuteBit
2003-12-17
打赏
举报
回复
这是个计算机浮点运算问题,不是 ib 的问题.
Numeric(6,2)这样的定义可能能解决.
如果在 fb1.5 中可以用 Numeric(10,2) 这样更大的表达方法.
如果你存放的数字范围大,可以使用, DOUBLE PRECISION 类型.
inte
r
base
6.0 win32
win32版的
inte
r
base
6服务器端,默认用户:SYSDBA、密码:masterkey
inte
r
base
介绍
Inte
r
Base
开发指南,数据库设计基础,基本原理,数据操纵等
inte
r
base
70手册
很不错的
INTE
R
BASE
的教程,网上关于
INTE
R
BASE
的
中
文资料太少了,有兴趣就看看这个吧.
Firebird介绍共4页.pdf.zip
Firebird介绍共4页.pdf.zip
Inte
r
Base
7
Inte
r
base
7 2010-09-29 00:11:13| 分类: 数据库|举报|字号 订阅
Inte
r
Base
70还提供了新的API函数用来监测
Inte
r
Base
客户端版本,这些函数是: isc_get_client_version() isc_get_client_major_version() isc_g
其他数据库
2,209
社区成员
9,519
社区内容
发帖
与我相关
我的任务
其他数据库
其他数据库开发 其他数据库
复制链接
扫一扫
分享
社区描述
其他数据库开发 其他数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章