二個參數(shù)是:要輸入的數(shù),返回幾進(jìn)制

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、鐘樓網(wǎng)絡(luò)推廣、微信小程序開發(fā)、鐘樓網(wǎng)絡(luò)營銷、鐘樓企業(yè)策劃、鐘樓品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供鐘樓建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:chinadenli.net
10表示10進(jìn)制;如果輸入一個大于10的值,就會用a-z的字母表示高后的數(shù)字;
比如16進(jìn)制時,a=11,b=12.......
Golang Float乘Float高精度,轉(zhuǎn)Int高精度。
使用big.Float
bigF1 := new(big.Float).SetFloat64(f1)
bigF2 := new(big.Float).SetFloat64(f2)
mul := new(big.Float).Mul(bigF1, bigF2)
轉(zhuǎn)Int,先用上面的方法轉(zhuǎn)為big.Float,再用.String轉(zhuǎn)為字符串。
new(big.Int).SetString(bigFloat, 10) // 即可轉(zhuǎn)為big.Int
// big.Int可轉(zhuǎn)為常用的int類型。
// big.Float可轉(zhuǎn)為常用的Float類型。
// big.Float不能直接轉(zhuǎn)為Int類型。
func Sub(x float64, y float64, more ...float64) float64 {
floatX := new(big.Float).SetFloat64(x)
floatY := new(big.Float).SetFloat64(y)
result := new(big.Float).Sub(floatX, floatY)
if len(more) 0 {
? for _, m := range more {
? ? floatM := new(big.Float).SetFloat64(m)
? ? result = new(big.Float).Sub(result, floatM)
}
}
f, _ := strconv.ParseFloat(result.String(), 64)
return f
}
//二進(jìn)制轉(zhuǎn)十六進(jìn)制
func?btox(b?string)?string?{
base,?_?:=?strconv.ParseInt(b,?2,?10)
return?strconv.FormatInt(base,?16)
}
//十六進(jìn)制轉(zhuǎn)二進(jìn)制
func?xtob(x?string)?string?{
base,?_?:=?strconv.ParseInt(x,?16,?10)
return?strconv.FormatInt(base,?2)
}
換行符 \n 在 Windows 記事本不會顯示,用 Notepad2、Notepad++、UltraEdit 等打開就能看到,或者用 \r\n
從上一節(jié)的內(nèi)容可知,Do() 和 Receive() 等方法的返回值,除了 error 外,是一個 interface{} 類型的返回值,因此當(dāng)我們的復(fù)雜操作返回的不是基本數(shù)據(jù)類型時,就需要我們自己解析返回值,例如,當(dāng)我們利用 HMGET 方法獲取一批返回值時,就需要對返回結(jié)果進(jìn)行解析,具體如下:
由于返回值是多條數(shù)據(jù),因此需要先將 reply 轉(zhuǎn)成 []interface 類型,然后在遍歷結(jié)果時在分別轉(zhuǎn)成 []uint8 (byte數(shù)組), 最后再轉(zhuǎn)成 string 類型。
隨著我們操作復(fù)雜度,數(shù)據(jù)解析的工作量也會非常大,(lua 腳本的使用,會使結(jié)果的解析更為復(fù)雜,因為可能存在多種類型的結(jié)果一起返回的情況,lua 腳本相關(guān)的內(nèi)容會在下一節(jié)介紹)。
redigo 包中的返回值助手函數(shù)的存在,就是為了幫助我們完成這些枯燥繁瑣的數(shù)據(jù)解析過程。
返回值助手函數(shù)相關(guān)源碼路徑為 github.com/gomodule/redigo/redis/reply.go 提供的主要方法如下:
上述返回值助手函數(shù)的具體使用,應(yīng)該依據(jù)具體的命令進(jìn)行選擇。如果大家還記得上一節(jié)介紹的 Redis 基本數(shù)據(jù)類型,可能會有些疑問,對于 redis 來說,其數(shù)據(jù)據(jù)存儲本質(zhì)都是 []bytes, 為什么可以解析出 Int、int64、float等類型的數(shù)據(jù)呢?
我們以 Float64() 為例進(jìn)行說明,具體源碼如下:
其實,返回值助手函數(shù)是將 []byte 類型的原始數(shù)據(jù),利用 strconv.ParseFloat(string(reply), 64) 轉(zhuǎn)換成了 float64類型,因此在我們使用過程中返回值助手函數(shù)的選擇,應(yīng)該基于業(yè)務(wù)和實際存儲的數(shù)據(jù)格式為依據(jù)。我們以第一小節(jié)的示例為例,看返回值助手函數(shù)如何降低我們的工作量,具體如下:
除了使用返回值助手函數(shù)對上述固定結(jié)構(gòu)的結(jié)果進(jìn)行解析外,redigo 包還提供了一個 Scan()函數(shù)用于解析自定義的復(fù)雜數(shù)據(jù)結(jié)構(gòu),我們依然以上一個示例進(jìn)行說明,具體示例如下:
如果返回結(jié)果為結(jié)構(gòu)化切片,也可以使用 canSlice() 方法,從而簡化 loop 處理的部分,具體示例如下:
通過上述的示例,我們介紹了 scan 函數(shù)的基本用法,但是細(xì)心的同學(xué)可能會發(fā)現(xiàn)嗎,為什么數(shù)據(jù)寫入時,value 的類型為 []int64 但是讀取時只能按照 string 類型讀取呢。這是因為 Redis 底層存儲的數(shù)據(jù)本質(zhì)都是 string 類型,。 無論是 HMSET 還是 MSET 最終都只能按照 string 類型讀取,因為其本質(zhì)都是 hash 結(jié)構(gòu),不同之處僅在于 HMSET 是嵌套的 hash類型。 因此,[]int64 數(shù)據(jù)在寫入階段,就已經(jīng)被自動處理為 []byte,寫入 redis 之后,len 和 類型 屬性會丟失。
如果強行按照 []int64解析將出錯:
如果 value 必須以結(jié)構(gòu)化的數(shù)據(jù)存儲,那么可以提前對要寫入的數(shù)據(jù)進(jìn)行編碼,例如 json、protobuf 等,取出后再進(jìn)行解碼獲得原始數(shù)據(jù)。
文章名稱:go語言的strconv,go語言的web框架
標(biāo)題URL:http://chinadenli.net/article23/dsijocs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、微信公眾號、虛擬主機、網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)