数据库服务器支持浮点值的以下数据类型。
SQL 浮点数据类型
ESQL/C 或 C 语言类型
值的范围
SMALLFLOAT, REAL
float
单精度值可达到 9 位有效数字
FLOAT, DOUBLE
PRECISION
double
双精度值可达到 17 位有效数字
DECIMAL(p)
decimal
绝对值的范围 10-130 - 10124
声明浮点主机变量
当使用 C float 数据类型时(对于 SMALLFLOAT 值),请注意大多数 C 编译程序
将 float 作为 double 数据类型传递给函数。如果您声明函数参数为 float,可能接收一个
不正确的结果。例如:在以下摘录中,:hostvar 可能在 tab1 中产生一个不正确的值,这
取决于当您的程序将它作为参数传递时,C 编译程序如何处理 float 数据类型。
main()
{
double dbl_val;
EXEC SQL connect to 'mydb';
ins_tab(dbl_val);
⋮
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 114 -
}
ins_tab(hostvar)
EXEC SQL BEGIN DECLARE SECTION;
PARAMETER double hostvar;
EXEC SQL END DECLARE SECTION;
{
EXEC SQL insert into tab1 values (:hostvar, ...);
}
隐式数据转换
当 GBase 8s ESQL/C 程序将浮点列值提取到字符主机变量
(char 、
fixchar 、
varchar
或 string)中时,它仅包含可以适合字符缓冲区的 decimal 数字数。如果主机变量对于浮
点数的完整精度来说太小,
则 GBase 8s ESQL/C 将该数字舍入到主机变量可以容纳的精度。
在以下的代码段中,GBase 8s ESQL/C 程序从名为 principal 的 FLOAT 列中将值