第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將科學(xué)概念中的值解組為 Go 中的整數(shù)

將科學(xué)概念中的值解組為 Go 中的整數(shù)

Go
POPMUISE 2022-12-19 20:06:14
在我的 Go 代碼中,我正在努力解組我們從端點(diǎn)接收到的 JSON 有效負(fù)載。此端點(diǎn)以科學(xué)計(jì)數(shù)法對(duì)大值進(jìn)行編碼: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)}此處的編碼值相當(dāng)于標(biāo)準(zhǔn)表示法中的 3,898,733。但是,此代碼會(huì)打印錯(cuò)誤:json:無(wú)法將數(shù)字 3.898733e+06 解組到 int32 類(lèi)型的 Go 結(jié)構(gòu)字段 Test.Value這是有道理的,因?yàn)閟trconv也無(wú)法從字符串中解析此值。但是,我可以做到var i int32 = 3.898733e+06,并且可以編譯并生成正確的答案。那么,我該如何解決這個(gè)錯(cuò)誤呢?
查看完整描述

1 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊

該聲明var i int32 = 3.898733e+06有效是因?yàn)榇吮磉_(dá)式中的文字是無(wú)類(lèi)型常量,并且無(wú)類(lèi)型常量是根據(jù)上下文計(jì)算的。在這種情況下,即使它被寫(xiě)為浮點(diǎn)數(shù),它在編譯時(shí)也被解釋為 int32。這不會(huì)在運(yùn)行時(shí)發(fā)生。

有幾個(gè)選項(xiàng)可以使它適用于 JSON 封送處理:

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

  2. 定義一個(gè)自定義類(lèi)型并自己解組:

type LongInt int32


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

   // Parse data yourself and set the int value

   // Maybe use big.Int?

}

聲明Value為float64


查看完整回答
反對(duì) 回復(fù) 2022-12-19
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)