我正在尝试使用Go与数据库交互并且正在运行 处理十进制字段时出现问题。
在此数据库中,大多数基本上是整数字段的字段是 输入为十进制,精度为0 ......例如:
基本上任何int都以0精度存储为小数。
我正在尝试填充结构中的字段....
type Record struct {
ID uint
CHANGE_DATE uint
...
}
但是当我从数据库中获取字段时,他们经常会回来 这样的格式,但只有当数字足够长时:2.0141208e + 07
我发现我可以扫描到浮点数然后将浮点数转换为 像这样的uint ..
mydate := float32(0)
for rows.Next() {
r := Record{}
row.Scan(&.ID, &mydate)
myrecord.Change_date = uint(mydate)
}
如果ID足够大,那么ParseInt会失败,我发现我必须这样做 如上所示进行float / int转换。
由于我有很多字段(几乎所有数字),我需要这样做, 我想知道是否有更好的方法来进行此类型转换?
值得一提的是,这是一个打包的ERP数据库 系统,所以改变表定义不是一个选项和原因 我不会让所有字段浮在Go中是因为我正在尝试输出json 我在json输出中得到了科学记数法。
答案 0 :(得分:0)
从RPC服务器解析JSON时遇到了相同的问题。我创建了一个将科学记法字符串转换回unint的函数,如下所示:
func scientificNotationToUInt(scientificNotation string) (uint, error) {
flt, _, err := big.ParseFloat(scientificNotation, 10, 0, big.ToNearestEven)
if err != nil {
return 0, err
}
fltVal := fmt.Sprintf("%.0f", flt)
intVal, err := strconv.ParseInt(fltVal, 10, 64)
if err != nil {
return 0, err
}
return uint(intVal), nil
}