首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不接受超出范围的转换mysql go decimal

不接受超出范围的转换mysql go decimal
EN

Stack Overflow用户
提问于 2019-10-25 22:26:49
回答 1查看 42关注 0票数 0

我正在编写一个与MySQL通信的Go程序。

我有以下专栏:

代码语言:javascript
复制
lot_size double(8,8)

我正在摄取一个xml提要,并在Go中解析它。下面是lot_size xml data的数据转储

代码语言:javascript
复制
(string) (len=4) "0.36"

此外,有时它可能是:

代码语言:javascript
复制
(string)  ""

在我的Go程序中,我有以下转换:

代码语言:javascript
复制
 if listings.Listings[i].LotSize == "" {
    lotSize=0.00000000
 } else {
    lotSize,_=strconv.ParseFloat(listings.Listings[i].LotSize,8)
 }

Mysql产生以下错误:

Error 1264: Out of range value for column 'lot_size' at row 1

在这一点上不确定要做什么

更新

以下是解析后的浮点数据输出:

代码语言:javascript
复制
(float64) 0
34 (float64) 0.410239
35 (float64) 0.045914
36 (float64) 0.325941
37 (float64) 0.208425
38 (float64) 0.078627
39 (float64) 0.132989
40 (float64) 0.163522
41 (float64) 0.24
42 (float64) 0.230119
43 (float64) 0
44 (float64) 4.25

我的sql查询是:

insert into listings (lot_size) values (?)

代码语言:javascript
复制
stmt,err:=db.Prepare(sqlStatement)
res,err:=stmt.Exec(lotSize)
EN

回答 1

Stack Overflow用户

发布于 2019-10-25 23:19:45

上面评论中讨论的答案可以归结为:

MySQL FLOAT(8,8)类型表示该值可以有八位数,但所有八位数都必须位于小数的右侧。这意味着,如果您声明了一个带有两个相同数字的参数的FLOAT,则不能在此列中存储任何1.0或更大的值。

此处记录了此行为:https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html

顺便说一句,这种带有两个参数的非标准形式的FLOAT在MySQL 8.0.17中将被弃用,并将在未来的MySQL版本中删除。建议改用DECIMAL

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58560458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档