float 允许有限的精度 - double 通常有更多,15 位数字。
一个警告:例如,浮点数在处理金钱时会出现问题。示例:.10
不能在数据的 IEEE-754 浮点内部表示中精确表示。一个常见的解决方法是让 oracle 使用 BCD 算法,这可以避免浮点问题,然后将最终结果读入双精度数。
FLT_DIG
This is the number of decimal digits of precision for the float data type. Technically, if p and b are the precision and base (respectively) for the representation, then the decimal precision q is the maximum number of decimal digits such that any floating point number with q base 10 digits can be rounded to a floating point number with p base b digits and back again, without change to the q decimal digits.
FLT_DIG 通常是最小精度的六位数,DBL_DIG:15。
只要你避免在 C 代码中做大量的数学计算和比较,除非你知道如何处理我提到的问题和其他问题,否则很容易得到最终的结果。
EXEC SQL BEGIN DECLARE SECTION;
static double o_start_x;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT start_x
FROM my_table
INTO :o_start_x;
如果这个数字很大,您可能必须使用字符串。NUMBER 的限制是 32 位精度,这超出了常见 C 数据类型的精度限制。Pro*C 不支持 bignum 数据类型,AFAIK。