加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL将尾随零添加到数字

发布时间:2020-12-13 18:07:48 所属栏目:百科 来源:网络整理
导读:最近我将DB迁移到PostgreSQL,它有一些列定义为数字(9,3)和数字(9,4).在测试应用程序时,我发现当数据保存到这些列时,会在插入的值中添加尾随零.我正在使用Hibernate,我的日志显示为预准备语句构建的正确值. 我插入的数据示例在数字(9,3)列中为0.75,存储的值为
最近我将DB迁移到PostgreSQL,它有一些列定义为数字(9,3)和数字(9,4).在测试应用程序时,我发现当数据保存到这些列时,会在插入的值中添加尾随零.我正在使用Hibernate,我的日志显示为预准备语句构建的正确值.

我插入的数据示例在数字(9,3)列中为0.75,存储的值为0.750.数字(9,4)列的另一个示例:我插入值12,DB保持12.0000.

我发现了这个相关的问题:postgresql numeric type without trailing zeros.但它没有提供解决方案,除了引用9.x文档说没有添加尾随零.从这个问题,答案引用了文件(我也读过),其中说:

Numeric values are physically stored without any extra leading or
trailing zeroes. Thus,the declared precision and scale of a column
are maximums,not fixed allocations.

但是,就像那个问题海报一样,我看到添加了尾随零. Hibernate在日志中生成的原始插入不会显示这个额外的行李.所以我假设它是一个我没有正确设置的PostgreSQL,我只是找不到我是怎么弄错的.

如果指定精度和比例,Pg将填充到该精度和比例.
regress=> SELECT '0'::NUMERIC(8,4);
 numeric 
---------
  0.0000
(1 row)

没有办法把它关掉.它仍然是相同的数字,精度由类型而不是值定义.

如果要使用值定义的精度,则必须使用无约束数字:

regress=> SELECT '0'::NUMERIC,'0.0'::NUMERIC;
 numeric | numeric 
---------+---------
       0 |     0.0                                                                                                                                                             
(1 row)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读