pgx v5中如何高效将float转为pgtype.Numeric?
在pgx v5中创建pgtype.Numeric对象的方法
你手动构造pgtype.Numeric的方式是完全正确的,这种直接设置Int(存储缩放后的整数值)、Exp(指数,负数值对应小数位数)和Status的写法完全符合v5版本的类型定义。
除了手动构造,pgx v5的pgtype包提供了官方的ParseNumeric函数,可以直接从字符串解析出合法的Numeric对象,示例代码如下:
import ( "github.com/jackc/pgx/v5/pgtype" ) func main() { // 解析字符串"5.43"得到对应Numeric对象 num, err := pgtype.ParseNumeric("5.43") if err != nil { // 处理解析错误,比如非法数字格式 panic(err) } // num此时为状态Present的有效Numeric对象 }
如果需要从float64类型转换,官方没有提供直接替代v4版本Set()的方法,但你可以基于ParseNumeric封装一个简易转换函数:
import ( "fmt" "github.com/jackc/pgx/v5/pgtype" ) func FloatToNumeric(f float64) (pgtype.Numeric, error) { return pgtype.ParseNumeric(fmt.Sprintf("%g", f)) }
注意:使用浮点数转字符串再解析的方式时,要考虑浮点数本身的精度限制。如果对数值精度要求极高,手动构造
big.Int的方式是更可靠的选择。
内容的提问来源于stack exchange,提问作者KarlsMaranjs
相关产品推荐
相关产品推荐

