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

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

如果數字以 0 開頭,strconv.ParseInt 失敗

如果數字以 0 開頭,strconv.ParseInt 失敗

Go
烙印99 2022-10-17 19:29:39
我目前在解析 Go 中以 0 開頭的一些數字時遇到問題。fmt.Println(strconv.ParseInt("0491031", 0, 64))0 strconv.ParseInt:解析“0491031”:語法無效GoPlayground:https ://go.dev/play/p/TAv7IEoyI8I我認為這是由于一些基本轉換錯誤,但我不知道如何修復它。如果您需要更多詳細信息,我在使用 gocsv 解析 5GB+ csv 文件時遇到此錯誤。[此錯誤是由GoCSV 庫引起的,該庫不允許為要解析的數字指定基數。]
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

引用自strconv.ParseInt()

如果 base 參數為 0,則真正的基數由符號后面的字符串前綴(如果存在)暗示:2 表示“0b”,8 表示“0”或“0o”,16 表示“0x”,否則為 10。此外,僅對于以 0 為基數的參數,允許使用 Go 語法為整數文字定義的下劃線字符。

您正在傳遞0for base,因此將從字符串值推斷要解析的基數,并且由于它以 a 開頭,'0'后跟 non '0',因此您的數字被解釋為八進制 (8) 數字,并且該數字9在那里無效。

請注意,這將起作用:

fmt.Println(strconv.ParseInt("0431031", 0, 64))

并輸出(在Go Playground上試試):

143897 <nil>

(八進制431031等于143897十進制。)

如果您的輸入以 10 為基數,請10傳遞base

fmt.Println(strconv.ParseInt("0491031", 10, 64))

然后輸出將是(在Go Playground上嘗試):

491031 <nil>


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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