二,数字类型

92 阅读2分钟

一些数字类型的操作

  1. 申明数字类型变量
  2. 不同数字类型转换
  3. uint类型的补码问题
  4. 数字和字符串类型相互转换
  5. is_number方法
  6. 取整,四舍五入
  7. 获取一个随机数和随机6位数
  8. 四舍五入保留3位小数点
// 1. 申明数字类型
var a int = 2
b := 3.14
fmt.Printf("数字类型的值是:%d,变量类型是:%T \n", a, a)
fmt.Printf("数字类型的值是:%v,变量类型是:%T \n", b, b)

// 打印结果
数字类型的值是:2,变量类型是:int 
数字类型的值是:3.14,变量类型是:float64 

// 拓展补充
// int类型有:int,int8,int16,int32,int64
// uint类型有:uint,uint8,uint16,uint32,uint64

// 2. 不同数字类型转换
var a int = 2
b := 3.14
fmt.Printf("整数转浮点数:%v \n", float64(a))
fmt.Printf("浮点数转整数:%v \n", int(b))

// 打印结果
整数转浮点数:2 
浮点数转整数:3 

// 3. uint类型的补码问题
var c uint = 1
var d uint = 2
fmt.Println(c - d)           // 18446744073709551615
fmt.Println(math.Pow(2, 64)) // 1.8446744073709552e+19

// 打印结果
// 原因: -1 在二进制里会进行补码,就变成了2^64
18446744073709551615
1.8446744073709552e+19

// 拓展补充
// 原码、反码、补码

// 4. 数字和字符串类型相互转换
e := 3
f := "4"
newE := strconv.Itoa(e)
fmt.Printf("int转string类型是:%T,值是:%v \n", newE, newE)
newInt, _ := strconv.Atoi(f)
fmt.Printf("string转int类型是:%T,值是:%v \n", newInt, newInt)

// 打印结果
intstring类型是:string,值是:3 
stringint类型是:int,值是:4 

// 5. is_number方法
func isNumeric(s string) bool {
	_, err := strconv.ParseFloat(s, 64)
	return err == nil
}

fmt.Println(isNumeric("555555")) // true
fmt.Println(isNumeric("abc555")) // false

// 打印结果
true
false

// 6. 取整,四舍五入
g := 3.1415926
fmt.Printf("向上取整结果:%v \n", math.Ceil(g))      // 4
fmt.Printf("向下取整结果:%v \n", math.Floor(g))     // 3
fmt.Printf("四舍五入结果:%v \n", math.Ceil(g-0.5))  // 3
fmt.Printf("四舍五入结果:%v \n", math.Floor(g+0.5)) // 3

// 7. 获取一个随机数和随机6位数
// 生成随机6位数函数
func CreateCaptcha() string {
	seed := rand.NewSource(time.Now().UnixNano())
	number := rand.New(seed).Int31n(1000000)
	return fmt.Sprintf("%06v", number)
}
// main 函数
rand.Seed(time.Now().Unix())
fmt.Printf("获取一个1-10的随机数:%v \n", rand.Intn(10)) // 4
fmt.Printf("生成一个6位随机数:%v \n", CreateCaptcha())  // 909083 

// 9. 四舍五入保留3位小数点
j := fmt.Sprintf("%.3f", 3.1415926)
fmt.Printf("截取小数点后三位结果是:%v \n", j) // 3.142 


// 10. 待补充