Amazon redshift 红移未正确插入数据

Amazon redshift 红移未正确插入数据,amazon-redshift,Amazon Redshift,我的数据类型是decimal18,4,通过copy命令我将json插入到红移表中。对于值0.13,它正确插入,但是对于值0.1475,它作为0.1474插入 IEEE754标准中0.1475的最准确表示是 1.474999999999922282838827624E-1类似,但浮点数较少 Redshift在将数字插入定义精度为4的列之前,在内部使用Float或Double,并且不应用舍入,只是将结果修剪到小数点后4位 只有X+Y/2^N的值会显示为精确值,您可以对其进行测试。小数点后4位的最佳值

我的数据类型是decimal18,4,通过copy命令我将json插入到红移表中。对于值0.13,它正确插入,但是对于值0.1475,它作为0.1474插入

IEEE754标准中0.1475的最准确表示是

1.474999999999922282838827624E-1类似,但浮点数较少

Redshift在将数字插入定义精度为4的列之前,在内部使用Float或Double,并且不应用舍入,只是将结果修剪到小数点后4位

只有X+Y/2^N的值会显示为精确值,您可以对其进行测试。小数点后4位的最佳值为1/16=0.0625


因此,当根据文件摘要使用复制时,您必须通过ROUNDEC选项

IEEE754标准中0.1475的最准确表示为双精度

1.474999999999922282838827624E-1类似,但浮点数较少

Redshift在将数字插入定义精度为4的列之前,在内部使用Float或Double,并且不应用舍入,只是将结果修剪到小数点后4位

只有X+Y/2^N的值会显示为精确值,您可以对其进行测试。小数点后4位的最佳值为1/16=0.0625


因此,当使用“按文档复制”时,您必须通过ROUNDEC选项

您是否可以解释,只有X+1/2^N的值才会显示为精确值,您可以进行测试。对于小数点后4位,最佳值为1/16=0.0625。事实上,分数应为Y/2^N。请更正答案。只有分数像1/2,1/4,3/4,1/8,3/8,5/8,7/8,1/16。。。1/32具有精确的二进制表示。任何其他分数都将具有无限个分数位数的不精确二进制表示。就像我们使用小数点1/3==0.3,2/3==0.6一样,只有Y/10^N类型的小数点可以用有限的小数位数表示。红移在以定义的精度将数字插入列之前,在内部使用Float或Double。。。这并不是说我不相信你-我一直在努力寻找有关这方面的文档,但运气不好。有吗?你能解释一下吗?只有X+1/2^N的值会精确显示,你可以测试。对于小数点后4位,最佳值为1/16=0.0625。事实上,分数应为Y/2^N。请更正答案。只有分数像1/2,1/4,3/4,1/8,3/8,5/8,7/8,1/16。。。1/32具有精确的二进制表示。任何其他分数都将具有无限个分数位数的不精确二进制表示。就像我们使用小数点1/3==0.3,2/3==0.6一样,只有Y/10^N类型的小数点可以用有限的小数位数表示。红移在以定义的精度将数字插入列之前,在内部使用Float或Double。。。这并不是说我不相信你-我一直在努力寻找有关这方面的文档,但运气不好。有吗?从JSON格式的数据文件加载数字到定义为数字数据类型的列时,我们可能会失去精度。有些浮点值在计算机系统中不能精确表示。因此,从JSON文件复制的数据可能不会像预期的那样进行舍入。为了避免精度损失,请使用双引号字符将值括起来,将数字表示为字符串,使用ROUNDEC将数字四舍五入,而不是截断,使用CSV,字符分隔,而不是使用JSON或Avro文件,或者固定宽度的文本文件当从JSON格式的数据文件加载数字到定义为数字数据类型的列时,我们可能会失去精度。有些浮点值在计算机系统中不能精确表示。因此,从JSON文件复制的数据可能不会像预期的那样进行舍入。若要避免精度损失,请使用双引号字符将值括起来,将数字表示为字符串,使用ROUNDEC对数字进行四舍五入,而不是截断,使用CSV、字符分隔或固定宽度的文本文件,而不是使用JSON或Avro文件