【问题标题】:pg-promise returns decimal as string valuespg-promise 返回十进制作为字符串值
【发布时间】:2021-01-21 01:23:21
【问题描述】:

pg-promise 将十进制值作为字符串返回。我该如何解决这个问题?

select round(avg(numcol),2)::decimal from details

【问题讨论】:

  • here,解决方法同this
  • @vitaly-t 感谢分享解决方案。但问题是我是 pg-promise 的新手。一个完整的例子会很有帮助。
  • 这不是我在回答中给你的吗?你还期待什么?
  • 我不确定在哪里使用您在答案中提供的代码。所以我只是在 db.each(query, values, data=>{...}) 中使用了 javascript parseFloat。它奏效了。
  • 你应该先学习使用该库的基础知识,那里都非常清楚。这里不适合讨论如何使用该库。

标签: node.js pg-promise node-postgres


【解决方案1】:

按照我在 cmets 中提供的链接(onetwo),您应该会看到 JavaScript 根本没有所需的精度,因此自动转换可能会导致精度丢失。

如果你不关心这个,你可以应用 JavaScript 标准 parseFloat:

const types = pgp.pg.types; // types conversion interface

// for real/float4:
types.setTypeParser(700, parseFloat);

// for double precision/float8:
types.setTypeParser(701, parseFloat);

// for arrays of float4:
const parseFloat4Array = types.getTypeParser(1021);
types.setTypeParser(1021, a => parseFloat4Array(a).map(parseFloat));

// for arrays of float8:
const parseFloat8Array = types.getTypeParser(1022);
types.setTypeParser(1022, a => parseFloat8Array(a).map(parseFloat));

否则,请使用专门的库来处理小数。

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2018-01-16
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多