11ESQL/C程序中使用DECIMAL数据类型

上传人:jin****ng 文档编号:174121437 上传时间:2022-12-14 格式:DOCX 页数:22 大小:124.90KB
收藏 版权申诉 举报 下载
11ESQL/C程序中使用DECIMAL数据类型_第1页
第1页 / 共22页
11ESQL/C程序中使用DECIMAL数据类型_第2页
第2页 / 共22页
11ESQL/C程序中使用DECIMAL数据类型_第3页
第3页 / 共22页
资源描述:

《11ESQL/C程序中使用DECIMAL数据类型》由会员分享,可在线阅读,更多相关《11ESQL/C程序中使用DECIMAL数据类型(22页珍藏版)》请在装配图网上搜索。

1、ESQL/C 程序中使用在ESQL/C程 序中使用DECIMAL数据类型学完本章后你将能够:决定处理DECIMAL数据类型的C主变量数据类型 了解DECIMAL数据类型存储需求.使用ESQ L/C库函数将其它数据转换成DECIMAL或相反.融海咨询ESQ L/C程序中使用DEC IM AL数据类型DECIMAL数据类型本章介绍 DECIMAL 数据类型的概貌,并给出了几个使用该类型 的例子。学完本章,你将能够:知道把宿主变量定义为C的何种数据类型,来存放SQL数据 类型DECIMAL的值。 理解该数据类型的存储要求。使用ESQL/C的库函数把数据转换成DECIMAL类型或从 DECIMAL类型

2、转换成别的类型。DECIMAL 概览 DEQMAL 10x10 428 125!0.00000000000000000000. 0001囱融海咨询Sca/e56789.0123 DECIMAL +12610x10 127!10000000000000000000 0000.0ESQL/CO 口 DECIMAL口 DECIMAL 值:依赖于机器可以多达32为有效数字可以有小数点,或没有可以有范围在-128到+126之间的指数象下面这样定义DECIMAL字段:ColumnName DECIMAL ( m , n ) 这里,m是精度(有效数字的数目),n是有效位数(小数点右边的数 字的位数)。在定义

3、时,省略有效位数,则是浮点 DECIMAL 类型;声明有效 位数,则是定点DECIMAL。SQL的MONEY类型值以定点DECIMAL类型存储,ESQL/C 不区分 MONEY类型值和 DECIMAL类型值;两者都是 DECIMAL。同样,DATETIME和INTERVAL类型都有一个DECIMAL部 分。访问DECIMAL值程你的程序中,deewal備存储在一个dec_t蛰构申该蛰构定义$in form ix DiR/incl/esql/decim al.h#define D ECSIZ E 16struct decim alshort dec_exp; /* exponent base 1

4、00 */short dec_pos; /* sign of num ber */shortdec_ndgts; /* # significant dgts*/chardec_dgtsD ECSIZ E; /*actual dgts*/;typedef struct decim al dec_t;霭融海咨询ESQ L/C程序中使用DEC IM AL数据类型为使用DECIMAL类型,在代码中包含进来头文件decimalho $include decimal;定义在decimal.h文件中的dec_t结构存放这些值:dec_exp数字的指数,基数是100dec_pos数字的符号:1 当它大于或等于

5、 00 当它小于0-1 当它是空值 dec_ndgts 有效数字的数目,基数是100 dec_dgts 实际的有效数字,基数是100当操作 DECIMAL 类型的时候,应当使用 ESQL/C 库中提供的 DECIMAL函数,将在后续页中讨论它们。任何其它的操作、修改或 分析可能导致不可预测的结果。这些函数转换其它数据值到DECIM ALdeccvasc deccvint deccvlong deccvdbl-转换 string 到 decim al-转换 integer 到 decim al-转换 long 到 decim al-转换 double 到 decim al丿韶融海咨询ESQ L/

6、C程序中使用DEC IM AL数据类型Decimal 函数转换到DECIMAL在ESQL/C库中有四个函数可以把C的数据类型转换成DECIMAL 值:deccvasc(from,len,to) char *from; int len; dec_t *to; 返回值deccvint(from,to) int from; dec_t *to;deccvlong(from,to) long from; dec_t *to;deccvdbl(from,to) int from; dec_t *to;把ASCII字符串转换成DECIMAL值。指向ASCII源字符串的指针。ASCII源字符串的字节数。指向

7、目的DECIMAL结构的指针。-1200 产生上溢 -1201 产生下溢-1213 存在非数值字符 -1216 存在坏的 指数把C的整数转换成DECIMAL值。 要转换的整数值。指向目的DECIMAL结构的指针。把C的长整数转换成DECIMAL值。 要转换的长整数值。指向目的DECIMAL结构的指针。把C的双精度数转换成DECIMAL值。 要转换的双精度数值。指向目的DECIMAL结构的指针。所有的四个函数返回:0当转换成功时0当转换失败时示例转换到DECIMAL厳蜃聲一个转换念SCI轟 的示飾char D ecString = 1234.56; $include decim al;m ain

8、()int E rrC ode;dec_t D ecV alue;if( E rrC ode =deccvasc( D ecString,sizeof( D ecString ), & DecV alue);printf( nE rror % d in converting string % s to decim aln, E rrC ode, D ecStringKd融海咨询ESQ L/C程序中使用DEC IM AL数据类型exit( -1 ); 在上面的例子中,包含进decimal.h头文件,使我们可以操作dec_t 结构。在使用仅由数值字符组成的ASCII字符串初始化DecString之

9、后, 使用 deccvasc( )函数把字符串转换成一个 DECIMAL 值,存放到 DECIMAL 结构 DecValue 中。注意到我们还检测了 deccvasc()的返回值。此时,如果愿意的话,可以把DecValue插入到一个DECIMAL字 段。我们需要 DECIMAL 值时,不必非做这种显示的转换。可以直接 使用字符串,而让数据库服务器做隐含的 转换。在ESQL/C库中有四个函数可以把DECIMAL值转换成ASCII字符 串。每个函数在小数点的位置和格式上稍有不同。dectoasc(from,to,len,rt) dec_t *from;char *to;int len;int rt

10、;把DECIMAL值转换成ASCII字符串。 指向源DECIMAL值的指针。指向存放ASCII字符串的目的缓冲。 目的缓冲的字节数。 小数点右边的数字的数目。char *dececvt(from,ndgt,decpt,sign) 把 DECIMAL 值转换成dec_t *from; int ndgt; int *decpt; int *signASCII字符串。指向源DECIMAL值的指针。 目的缓冲里的字节数。 指向小数点的偏移值的指针。指向符号的指针(!=0是负;=0是正) 。char *decfcvt(from,ndgt,decpt,sign) 把 DECIMAL 值转换成dec_t *

11、from; int ndgt;ASCII字符串。指向源DECIMAL值的指针。 小数点右边的数字的数目。int *decpt; int *sign指向小数点的偏移值 的指针。 指向符号的指针(!=0 是负;=0 是正)。rfmtdec(from,format,to)把DECIMAL值转换成格式化的字符dec_t *from; char *format; char *to;串。指向源DECIMAL值的指针。 指向格式字符串的指针。指向用于ASCII字符串的目的缓冲的指 针。所有的四个函数返回:0当转换成功时 32,767DECIMAL值 2,147,647所有的三个函数也返回:0 当转换成功时0

12、 当转换失败时示例转换DECIMAL到数值型char D ecString = 1234.56;$include decim al;m ain()int E rrC ode;dec_t D ecV alue;double D blV alue;if( E rrC ode =deccvasc(D ecString,sizeof( DecString ),& DecV alue)printf( nC onversion E rror % d,E rrC ode);exit( -1 );if( E rrC ode = dectodbl( & DecV alue, & DblV alue )print

13、f( nC onversion E rror % dn, E rrC ode );else Kd融海咨询printf( D ouble value is %gn, D blV alue );ESQ L/C程序中使用DEC IM AL数据类型在上面的例子中,我们再次先使用函数 deccvasc( )把字符串转换 成DECIMAL值,把结果存放到DecValue中。然后,使用函数dectodbK )把DECIMAL值转换成C的双精度类型, 把结果存放到DblValue中。一旦转换完成,使用printf )函数直接显示它。Decimal 函数算术运算下面这些函数对DECIMAL作简单的算术运算而不转

14、换到其它 数据类型:decadd-两个decimal数相加decsub-两个decimal数相减deem ul-两个decimal数相乘decdiv-两个decimal数相除decadd(op1,op2,result)dec_t *op1;dec_t *op2;dec_t *result;decsub(op1,op2,result)dec_t *op1;dec_t *op2;dec_t *result;decmul(op1,op2,result)dec_t *op1;dec_t *op2;dec_t *result;decdiv(op1,op2,result)在ESQL/C库中有四个函数可以对

15、DECIMAL值进行算术运算:把两个 DECIMAL 值加到一起 (op1 + op2)。指向头一个操作数的指针。指向第二个操作数的指针。 指向和的指针。从一个 DECIMAL 值减去另一个 DECIMAL 值(opl - op2)。指向头一个操作数的指针。 指向第二个操作数的指针。 指向差的指针。计算两个 DECIMAL 值的乘积 (opl * op2)。指向头一个操作数的指针。指向第二个操作数的指针。 指向积的指针。用一个 DECIMAL 值去除另一个DECIMAL 值(opl / op2)。dec_t *op1;dec_t *op2;dec_t *result;指向头一个操作数的指针。

16、指向第二个操作数的指针。 指向商的指针。所有的四个函数返回: 0 当转换成功时 -1200 发生上溢 -1201 发生下溢 -1202 被零除示例$include decim al;m ain()int E rrC ode;dec_t D ecV all, D ecV al2, D ecM ult;char R esult40;DECIMAL算术运算if( E rrC ode = decm ul( & DecV all, & DecV al2, & DecM ult )printf( nE rror % d in decim al mult. n,E rrC ode );else if( E

17、rrC ode =dectoasc( & DecM ult, R esult, sizeof( R esult ), -1) printf( nC onversion error %dn, E rrC ode );else ldchar( R esult, sizeof( R esult ), R esult )Kd融海咨询printf(R esult of m ultiplication is %sn,R esult);ESQ L/C程序中使用DEC IM AL数据类型在该例子中,我们假定两个DECIMAL值已经被装入。使用decmul:) 求两个DECIMAL值的乘积,并把结果存放到Dec

18、Mult中。然后,使用dectoasc()把乘积从DECIMAL值转换成ASCII字符串。 一旦转换完成,使用ldchar()给字符串加上空值结束符,然后使用 printf( )函数显示它。Decimal 函数DECIMAL 操作下面这些函数允许你操作DECIMAL值:deccm p-比较deccopy-拷贝decround-圆整dectrunc-截断Kd融海咨询ESQ L/C程序中使用DEC IM AL数据类型deccmp(dec1,dec2) dec_t *op1; dect_t *op2; 返回值deccopy(dec1,dec2) dec_t *op1; dect_t *op2;dec

19、round(dec1,scale) dec_t *op1; int scale;在ESQL/C库中有四个函数可以操作DECIMAL值:比较两个DECIMAL值的大小。 指向第一个DECIMAL值的指针。 指向第二个DECIMAL值的指针。-1第一个值 第二个值DECUNKNOW 第一个值或第二个值 是SQL的空值拷贝DECIMAL值。指向源DECIMAL结构的指针。 指向目的DECIMAL结构的指针。圆整DECIMAL值。指向源DECIMAL结构的指针。 舍入后小数点右边的有效位数。dectrunc(dec1,scale) 截断 DECIMAL 值。dec_t *opl;指向源DECIMAL结

20、构的指针。int scale;截断后小数点右边的有效位数。所有的四个函数返回:0当操作成功时2. 修改初始化全局记录为空值的函数,把修改过的域初始化为适 当值。3. 修改InputStocK )函数,把输入的单价转换成DECIMAL值。4. 重新生成程序。5. 运行程序,并插入一个记录。6. 运行DBAccess以验证DECIMAL值插入正确。练习答案stock_glob.h$include decim al;$typedef int sm allint;$struct stock /* tem plate for stock */sm allint StockN um ;charManuC

21、ode4;charDescription16;dec_t U nitPrice;charUnit5;charUnitD escr16;$struct stock Stock_t;/* working record for stock */$struct stock StockN ull_t;/* null record for stock */练习答案stock_add.ecInputStock()char InputStr79;printf( ftStock D ata Entryn );printf( t=n ); printf( t Stock N um ber: ); gets( In

22、putStr );(void)rstoi( InputStr, & Stock_t.StockN um ); w hile(1)printf( tM anufacturer C ode: ); gets( Stock_t.M anuC ode );if (IsM anufact(Stock_t.M anuC ode) break;elseprintf(t* Invalid C ode*);printf( t D escription: ); gets( Stock_t.Description );printf( t U nit Price: ); gets( InputStr );(void)

23、deccvasc( InputStr, sizeof(InputStr), & Stock_t.U nitPrice); printf( t U nit: ); gets( Stock_t.U nit );printf( t U nit D escription: ); gets( Stock_t.UnitD escr );stock_m ain.ecInitThings()rsetnull( C SH O RTTY PE, (char *)& StockN ull_t.StockN um );rsetnull( CCHARTYPE,StockNull_t.ManuC ode );rsetnu

24、ll( CCHARTYPE,StockNull_t.Description );rsetnull( C DECIMALTYPE, (char *)& StockN ull_t.U nitPrice ); rsetnull( CCHARTYPE,StockNull_t.Unit );rsetnull( C SH O RTTY PE, rsetnull( C CHARTYPE, rsetnull( C CHARTYPE,rsetnull( CCHARTYPE,StockNull_t.UnitD escr );(char *)& Stock_t.StockN um ); Stock_t.M anuC ode ); Stock_t.D escription );Stock_t.U nitPrice );rsetnull( C DECIMALTYPE, (char *)&rsetnull( C CHARTYPE,Stock_t.U nit );rsetnull( C CHARTYPE, Stock_t.U nitD escr );

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!