跳到主要内容

go数值类型

go 定义了三种数值类型:整型、浮点型和复数型(i2=1i^2=-1),架构无关的数值类型有:

uint8       8位无符号整数 (0 to 255)
uint16 16位无符号整数 (0 to 65535)
uint32 32位无符号整数 (0 to 4294967295)
uint64 64位无符号整数 (0 to 18446744073709551615)

int8 8位有符号整数 (-128 to 127)
int16 16位有符号整数 (-32768 to 32767)
int32 32位有符号整数 (-2147483648 to 2147483647)
int64 64位有符号整数 (-9223372036854775808 to 9223372036854775807)

float32 IEEE-754 32位浮点数
float64 IEEE-754 64位浮点数

complex64 32位实数+32位虚数
complex128 64位实数+64位虚数

byte uint8的别名
rune int32的别名

 和实现有关的数值类型有:

uint     32或者64
int 同uint
uintptr an unsigned integer large enough to store the uninterpreted bits of a pointer value

 提到数值类型,就不得不提隐式转换。go 语言的设计者认为隐式转换带来的便利远不及它带来的困扰,所以 go 不支持对非常量进行隐式转换,看下面一个例子。 可以将10赋值给f1,但不允许将f3赋值给f2,因为它们的类型不同。

package main

func main() {

var f1 float32 = 10
var f2 float64
var f3 int32 = 10
f2 = f3
}

 数值类型常见的问题还有溢出。上面表格标注了不同数值类型的上下限,当超出上下限时,就发生了溢出。下面例子里,uint8最大值为255,直接声明c=256无法通过编译,但是声明b=a+1可以通过编译,并且b的值为0,即发生了溢出。

package main

import "fmt"

func main() {

var a uint8 = 255
var b uint8 = a + 1

var c uint8 = 255 + 1

fmt.Printf("计算结果为 %d", b)

}

go 官方没有BigDecimal,使用比较多的是shopspring/decimal

署名-非商业性使用-禁止演绎 4.0 国际