You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何恢复表中已转为科学计数法的double precision类型原始数值

问题解决方案

你遇到的科学计数法问题本质包含两层原因:

  1. double precision 作为浮点类型,PostgreSQL默认在数值长度超过阈值时会自动用科学计数法展示,这属于显示层面的转换,精度范围内的存储数值本身没有丢失
  2. 若你的原始数值有效位数超过15位,double precision 本身的精度限制会导致存储时就损失精度,这种情况无法恢复原始值

现有double类型列的显示调整

  • 临时调整当前会话的显示格式,执行SQL即可让查询结果输出十进制格式:
SET float8_output = 'decimal';
  • 若需要永久生效,可在PostgreSQL配置文件postgresql.conf中添加float8_output = 'decimal',重启数据库后生效;也可直接针对指定库/用户做全局配置:
ALTER DATABASE 你的数据库名 SET float8_output = 'decimal';

永久保留原始数值的方案

如果要从根源避免科学计数法问题、同时保证数值精度不丢失,建议根据使用场景替换列的数据类型:

  • 若存储的都是整数,且数值范围在-9223372036854775808 ~ 9223372036854775807之间,选择bigint类型:
ALTER TABLE demo ALTER COLUMN "values" TYPE bigint USING "values"::bigint;
  • 若存储的是小数、或者整数超出bigint范围,选择精确数值类型numeric(支持任意精度):
ALTER TABLE demo ALTER COLUMN "values" TYPE numeric USING "values"::numeric;
  • 若该字段不需要做数值计算,仅作为标识存储,可直接使用字符串类型varchar,完全保留输入的原始格式。

注意:如果你的原始数值有效位数超过15位,已经存储在double中的数据已经损失了精度,改类型前建议用原始数据源重新导入,确保数值正确。

内容的提问来源于stack exchange,提问作者dsg1810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:06:03