企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# **复数** 和浮点数相似,Go提供了两种复数类型:`complex64`和`complex128`。第一个使用两个32位浮点数:一个用于实部,另一个用于复数的虚部,而`complex128`使用两个64位浮点数。复数以`a + bi`的形式表示,其中 `a`和 `b` 是实数,i 是方程 $x^2 =−1$ 的解。 所有这些数字数据类型都在`numbers.go`中分为三个部分进行说明。 第一部分的代码如下: ```Go package main import ( "fmt" ) func main() { c1 := 12 + 1i c2 := complex(5, 7) fmt.Printf("Type of c1: %T\n", c1) fmt.Printf("Type of c2: %T\n", c2) var c3 complex64 = complex64(c1 + c2) fmt.Println("c3:", c3) fmt.Printf("Type of c3: %T\n", c3) cZero := c3 - c3 fmt.Println("cZero:", cZero) ``` 这部分使用了一些复数进行计算。有两种方法去创建复数:与`c1`和`c2`一样直接创建, 或间接地通过计算现有的复数得到,例如`c3`和`cZero`。 >Tip: 如果你错误地尝试将一个复数创建为 `aComplex:= 12 + 2 * i`,那么将会有两种可能的结果,因为这个语句告诉Go你想要执行一个加法和一个乘法。如果当前作用域中没有名为i的数值变量,该语句会出现语法错误,你的Go代码编译将失败。但是,如果已经定义了一个名为i的数值变量,那么计算将会成功,但是你将不会得到 需的复数(**bug**)。 第二部分代码如下: ```Go x := 12 k := 5 fmt.Println(x) fmt.Printf("Type of x: %T\n", x) div := x / k fmt.Println("div", div) ``` 在这一部分中,我们使用带符号的整数。请注意,如果你想对两个整数做除法,Go认为你想得到整数答案并将计算返回整数除法的**商**。11除以2得到的是整数5而不是5.5。 >Tip: 当你将浮点数转换为整数时,浮点数的分数将被丢弃且被截断为零,这意味着一些数据可能会在处理过程中丢失。 最后一部分代码: ```GO var m, n float64 m = 1.223 fmt.Println("m, n:", m, n) y := 4 / 2.3 fmt.Println("y:", y) divFloat := float64(x) / float64(k) fmt.Println("divFloat", divFloat) fmt.Printf("Type of divFloat: %T\n", divFloat) } ``` 在程序的最后一部分中,我们将使用浮点数。在做除法时, 你可以看到如何使用```float64()```来告诉Go去创建一个```floating-point number```。如果你只是使用 ```divFloat: = float64 (x) / k```, 然后运行代码时你会得到以下错误消息: ```bash $ go run numbers.go # command-line-arguments ./numbers.go:35:25: invalid operation: float64(x) / k (mismatched types float64 and int) ``` 执行 ```numbers.go```,结果输出如下: ```bash Type of c1: complex128 Type of c2: complex128 c3: (17+8i) Type of c3: complex64 cZero: (0+0i) 12 Type of x: int div 2 m, n: 1.223 0 y: 1.7391304347826086 divFloat 2.4 Type of divFloat: float64 ```