NUMERIC 和 DECIMAL 数据类型的格式随精度的变化而变化。
必须用零填充值的右侧,以达到值的全部位数。还必须用零完全填充值的左侧,但填充随二进制编程自动进行。填充值后,将删除小数点。例如,12.34 如下所示:
NUMERIC(4,2):1234
NUMERIC(6,4):123400
NUMERIC(8,4):00123400
NUMERIC(12,6):000012340000
NUMERIC(16,8):0000001234000000
填充值并删除小数点后,以下规则适用:
char sign; // sign 1 for +, 0 for -unsigned char ndig; // # digitsunsigned char exp; // exponentunsigned char erracc; // should be 0unsigned short digits[80];};指数是 excess-80 格式,除非值为零。“零”值表示为:sign = 1ndig = 0erracc = 0exp = 0最大指数值为 159。支持的最大位数为 288。"digits[0]" 包含重要性最低的数字。以打包表示形式存储的数字每个“无符号短整型”(2 字节)数量有 2 个数字。对于给定的“数字”: lower order digit = digit[i] & 0x00FFhigh order digit = digit[i] & 0xFF00例如,考虑以 NUMERIC(20) 表示的值 100。该值的二进制布局为:0x0101 0x5000 0x0064 0x0000 0x0000 ...... Sign = 0x01Number digits = 0x01Exponent = 0x50Erracc = 0x00Digits = 0x0064再例如,考虑值 32769:0x0102 0x5000 0x0ad1 0x0003 0x0000 0x0000 .... Sign = 0x01Number digits = 0x02Exponent = 0x50Erracc = 0x00Digits = 0x0ad1 0x0003如果将数字转换成基数 10,则有:0x0ad1 = 2769 0x0003 = 3