问题描述:
当 numeric 数值 小于 1.00 时:存在丢失小数点末尾精度;
问题展现:
1、路径:`pwd`
/home/pg9.6.10/postgresql-9.6.10/src/interfaces/ecpg/test/sql
2、比较:sqlda.pgc 与 sqldabug.pgc 的差别
`diff sqlda.pgc sqldabug.pgc`
90c90,92
< big bigint
---
> big bigint,
> d3 numeric(4,2),
> d4 numeric(4,3)
95,97c97,99
< (1, 'a', 1.0, 1, 'a',1111111111111111111),
< (2, null, null, null, null,null),
< (4, 'd', 4.0, 4, 'd',4444444444444444444);
---
> (1, 'a', 1.0, 1, 'a',1111111111111111111,0.09,0.009),
> (2, null, null, null, null,null,0.99,0.999),
> (4, 'd', 4.0, 4, 'd',4444444444444444444,1.01,1.001);
3、创建ecpg1_regression
` createdb ecpg1_regression `
4、将 'sqldabug sqldabug.c' 加入 Makefile 中
` cat Makefile `
subdir = src/interfaces/ecpg/test/sql
top_builddir = ../../../../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/$(subdir)/../Makefile.regress
TESTS = array array.c \
binary binary.c \
code100 code100.c \
copystdout copystdout.c \
define define.c \
desc desc.c \
sqlda sqlda.c \
describe describe.c \
dyntest dyntest.c \
dynalloc dynalloc.c \
dynalloc2 dynalloc2.c \
execute execute.c \
fetch fetch.c \
func func.c \
indicators indicators.c \
oldexec oldexec.c \
parser parser.c \
quote quote.c \
show show.c \
insupd insupd.c \
sqldabug sqldabug.c
all: $(TESTS)
oldexec.c: oldexec.pgc $(ECPG_TEST_DEPENDENCIES)
$(ECPG) -r questionmarks -o $@ $<
5、执行结果
`./sqldabug | grep -vE 'NO_PID|d2' | grep -E 'id|d[1-4]'`
name sqlda descriptor: 'id' value 1
name sqlda descriptor: 'd1' value NUMERIC '1.0'
name sqlda descriptor: 'd3' value NUMERIC '0.00' /* 精确值:0.09 */
name sqlda descriptor: 'd4' value NUMERIC '0.000' /* 精确值:0.009 */
name sqlda descriptor: 'id' value 2
name sqlda descriptor: 'd1' value NULL'
name sqlda descriptor: 'd3' value NUMERIC '0.90' /* 精确值:0.99 */
name sqlda descriptor: 'd4' value NUMERIC '0.990' /* 精确值:0.999 */
name sqlda descriptor: 'id' value 4
name sqlda descriptor: 'd1' value NUMERIC '4.0'
name sqlda descriptor: 'd3' value NUMERIC '1.01' /* 精确值:1.01 */
name sqlda descriptor: 'd4' value NUMERIC '1.001' /* 精确值:1.001 */
红:错误部分
绿:正确部分