亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將科學概念中的值解組為 Go 中的整數

將科學概念中的值解組為 Go 中的整數

Go
POPMUISE 2022-12-19 20:06:14
在我的 Go 代碼中,我正在努力解組我們從端點接收到的 JSON 有效負載。此端點以科學計數法對大值進行編碼:type Test struct {    Key   string    Value int32}func main() {    data := []byte("{\"Key\": \"derp\", \"Value\": 3.898733e+06}")    var t *Test    err := json.Unmarshal(data, &t)        fmt.Printf("Error: %v\n", err)    fmt.Printf("Data: %v\n", t)}此處的編碼值相當于標準表示法中的 3,898,733。但是,此代碼會打印錯誤:json:無法將數字 3.898733e+06 解組到 int32 類型的 Go 結構字段 Test.Value這是有道理的,因為strconv也無法從字符串中解析此值。但是,我可以做到var i int32 = 3.898733e+06,并且可以編譯并生成正確的答案。那么,我該如何解決這個錯誤呢?
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

該聲明var i int32 = 3.898733e+06有效是因為此表達式中的文字是無類型常量,并且無類型常量是根據上下文計算的。在這種情況下,即使它被寫為浮點數,它在編譯時也被解釋為 int32。這不會在運行時發生。

有幾個選項可以使它適用于 JSON 封送處理:

  1. 聲明Valuejson.Number。通過這種方式,您可以嘗試將其解析為 int64,如果失敗,則將其解析為 float64,然后轉換為 int64,希望您不會失去精度。

  2. 定義一個自定義類型并自己解組:

type LongInt int32


func (i *LongInt) UnmarshalJSON(data []byte) error {

   // Parse data yourself and set the int value

   // Maybe use big.Int?

}

聲明Value為float64


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號