
# 数值类型
[表1]列出了ecpg提供的数值类型(numeric\\decimal)数据的常用接口：
 表1数值类型常用接口 
| API接口                                                                    | 接口描述                                      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|
| numeric\* PGTYPESnumeric_new(void)                                       | 请求一个指向新分配的numeric变量的指针。                   | 该函数在堆上创建numeric变量，返回值为numeric\*类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| decimal\* PGTYPESdecimal_new(void)                                       | 请求一个新分配的decimal变量的指针。                     | 该函数在堆上创建decimal变量，返回值为decimal\*类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| void PGTYPESnumeric_free(numeric\* var)                                  | 释放一个numeric类型变量的内存。                       | 该函数释放通过PGTYPESnumeric_new函数创建的numeric\*类型变量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| void PGTYPESdecimal_free(decimal\*)                                      | 释放一个decimal类型变量的内存。                       | 该函数释放通过PGTYPESdecimal_new函数创建的decimal\*类型变量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| numeric\* PGTYPESnumeric_from_asc(char\* str, char\*\* endptr)           | 从字符串中解析一个numeric类型。                       | 有效格式如：-2、.794、+3.44、592.49E07或者-32.84e-4。如果值解析成功，则返回一个有效指针，否则返回空指针。ecpg支持解析完整的字符串，目前不支持存储在\*endptr中的第一无效字符的地址，可以设置endptr为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| char\* PGTYPESnumeric_to_asc(numeric\* num, int dscale)                  | 返回由malloc分配的字符串的指针，它包含numeric类型num的字符串表达。 | numeric值将被使用dscale小数位打印，必要时会取整。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| int PGTYPESnumeric_add(numeric\* var1, numeric\* var2, numeric\* result) | 将两个numeric变量相加放到第三个numeric变量中。            | 该函数把变量var1和var2相加放到结果变量result中。成功时该函数返回0，出错时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| int PGTYPESnumeric_sub(numeric\* var1, numeric\* var2, numeric\* result) | 将两个numeric变量相减并且把结果返回到第三个numeric变量。       | 该函数把变量var2从变量var1中减除。该操作的结果被存储在变量result中。成功时该函数返回0，出错时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| int PGTYPESnumeric_mul(numeric\* var1, numeric\* var2, numeric\* result) | 将两个numeric变量相乘并且把结果返回到第三个numeric变量。       | 该函数把变量var1和var2相乘。该操作的结果被存储在变量result中。成功时该函数返回0，出错时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| int PGTYPESnumeric_div(numeric\* var1, numeric\* var2, numeric\* result) | 将两个numeric变量相除并且把结果返回到第三个numeric变量。       | 该函数用变量var2除变量var1。该操作的结果被存储在变量result中。成功时该函数返回0，出错时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| int PGTYPESnumeric_cmp(numeric\* var1, numeric\* var2)                   | 比较两个numeric变量。                            | 该函数比较两个numeric变量。错误时会返回INT_MAX。成功时，该函数返回三种可能结果之一： - var1大于var2则返回1。  - 如果var1小于var2则返回-1。  - 如果var1和var2相等则返回0。   |
| int PGTYPESnumeric_from_int(signed int int_val, numeric\* var)           | 将一个整数变量转换成一个numeric变量。                    | 该函数接受一个有符号整型变量并且把它存储在numeric变量var中。成功时返回0，失败时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| int PGTYPESnumeric_from_long(signed long int long_val, numeric\* var)    | 将一个长整型变量转换成一个numeric变量。                   | 该函数接受一个有符号长整型变量并且把它存储在numeric变量var中。成功时返回0，失败时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| int PGTYPESnumeric_copy(numeric\* src, numeric\* dst)                    | 将一个numeric变量复制到另一个中。                      | 该函数把src指向的变量的值复制到dst指向的变量。成功时该函数返回0，出错时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| int PGTYPESnumeric_from_double(double d, numeric\* dst)                  | 将一个双精度类型的变量转换成一个numeric变量。                | 该函数接受一个双精度类型的变量并且把结果存储在dst指向的变量中。成功时该函数返回0，出错时返回-1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| int PGTYPESnumeric_to_double(numeric\* nv, double\* dp)                  | 将一个numeric类型的变量转换成双精度类型。                  | 该函数将nv指向的变量中的numeric值转换成dp指向的双精度变量。成功时该函数返回0，出错时返回-1（包括溢出）。溢出时，全局变量errno将被额外地设置成PGTYPES_NUM_OVERFLOW。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| int PGTYPESnumeric_to_int(numeric\* nv, int\* ip)                        | 将一个numeric类型的变量转换成整数类型。                   | 该函数将nv指向的变量的numeric值转换成IP指向的整数变量。成功时该函数返回0，出错时返回-1（包括溢出）。溢出时，全局变量errno将被额外地设置成PGTYPES_NUM_OVERFLOW。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| int PGTYPESnumeric_to_long(numeric\* nv, long\* ip)                      | 将一个numeric类型的变量转换成长整型类型。                  | 该函数将nv指向的变量的numeric值转换成IP指向的长整型变量。成功时该函数返回0，出错时返回-1（包括溢出）。溢出时，全局变量errno将被额外地设置成PGTYPES_NUM_OVERFLOW。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| int PGTYPESnumeric_to_decimal(numeric\* src, decimal\* dst)              | 将一个numeric类型的变量转换成decimal类型。              | 该函数将src指向的变量的numeric值转换成dst指向的decimal变量。成功时该函数返回0，出错时返回-1（包括溢出）。溢出时，全局变量errno将被额外地设置成PGTYPES_NUM_OVERFLOW。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| int PGTYPESnumeric_from_decimal(decimal\* src, numeric\* dst)            | 将一个decimal类型的变量转换成numeric类型。              | 该函数将src指向的变量的decimal值转换成dst指向的numeric变量。成功时该函数返回0，出错时返回-1（包括溢出）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   
#### 示例
请参见[常用示例](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0224.html#ZH-CN_TOPIC_0000002558945689)章节。
