为了账号安全,请及时绑定邮箱和手机立即绑定

Golang - 从 MySQL 存储/检索十进制

Golang - 从 MySQL 存储/检索十进制

Go
天涯尽头无女友 2022-01-10 15:00:16
我正在使用 gin gonic 框架并构建了一个 JSON API。我想创建一个新的端点,但其中一个值是小数。我创建了以下结构:type AcceptedTerms struct {    Id          int64               FirstName   string              LastName    string                        Fee         ***DECIMAL***    Date        *time.Time}我的控制器代码片段:    query = "SELECT " +            "AcceptedTerms.* " +            "FROM AcceptedTerms " +            "ORDER BY " + sort_by + " " + order_by +            " LIMIT " + limit2 +            " OFFSET " + offset2`_, err := dbmap.Select(&response.AcceptedTerms, query)我应该将类型设置为十进制什么?我希望用户能够发布小数,例如 10.44 或 12.00 等,而不是“10.44”或“12.00”。我还希望该值按上述方式返回,而不是作为字符串返回。更新我试图对我的 Struct 执行此操作,但它仍然没有显示为小数点后 2 位type AcceptedTerms struct {    Id          int64    FirstName   string    LastName    string    Fee         Number    Date        *time.Time}type Number float64func (n Number) MarshalJSON() ([]byte, error) {    return []byte(fmt.Sprintf("%.2f", n)), nil}谢谢
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

要将 MySQL 值扫描到 Go vars,最好的做法是使用 sql.Null... 类型。特别是当列可以为空时。


对于小数,它可以是 sql.NullFloat64:


// ...

var dec sql.NullFloat64

row.Scan(&dec)

// dec.Valid - bool

// dec.Float64 - float64


查看完整回答
反对 回复 2022-01-10
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

float32带来什么问题吗?由于 MySQL 使用 32 位存储DECIMALfloat32应该足够好。


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号