上QQ阅读APP看书,第一时间看更新
2.2 浮点型
Go语言有两种类型的浮点型,分别为float32和float64,建议尽量使用float64。举例如下:
var f1 float32 = 9.90 fmt.Println(f1*100) var f2 float64 = 9.90 fmt.Println(f2*100)
执行上面的代码,会有如下结果:
989.99994 990
float32输出的结果明显是不对的,这是因为float32是按照默认小数位数输出的,但默认的小数位数并不准确。而float64则输出了正确的结果。所以,在使用浮点型时,应尽可能使用float64。
为了对前面介绍的整型以及本节的浮点型进行全面的对比,下面给出整型和浮点型的示例代码,读者可以看到各个类型的取值范围及默认值:
1. package main 2. 3. import "fmt" 4. 5. func main() { 6. // 无符号整型,默认值都是0 7. var u8 uint8 8. var u16 uint16 9. var u32 uint32 10. var u64 uint64 11. fmt.Printf("u8: %d, u16: %d, u32: %d, u64: %d\n", u8, u16, u32, u64) // 默认值都为0 12. u8 = 255 13. u16 = 65535 14. u32 = 4294967295 15. u64 = 18446744073709551615 16. fmt.Printf("u8: %d, u16: %d, u32: %d, u64: %d\n", u8, u16, u32, u64) 17. 18. // 整型 19. var i8 int8 20. var i16 int16 21. var i32 int32 22. var i64 int64 23. fmt.Printf("i8: %d, i16: %d, i32: %d, i64: %d\n", i8, i16, i32, i64) // 默认值都为0 24. i8 = 127 25. i16 = 32767 26. i32 = 2147483647 27. i64 = 9223372036854775807 28. fmt.Printf("i8: %d, i16: %d, i32: %d, i64: %d\n", i8, i16, i32, i64) 29. 30. // int型,32位系统的取值范围为int32,64位系统的为int64,两种系统的取值相同但为 不同类型 31. var i int 32. //i = i32 // 报错,编译不通过,类型不同 33. //i = i64 // 报错,编译不通过,类型不同 34. i = -9223372036854775808 35. fmt.Println("i: ", i) 36. 37. // 浮点型,f32的精度为6位小数,f64的精度为15位小数 38. var f32 float32 39. var f64 float64 40. fmt.Printf("f32: %f, f64: %f\n", f32, f64) // 默认值都为 0.000000 41. f32 = 1.12345678 42. f64 = 1.12345678901234567 43. fmt.Printf("f32: %v, f64: %v\n", f32, f64) // 末位四舍五入,输出:f32: 1.1234568, f64: 1.1234567890123457 44. 45. // 复数型 46. var c64 complex64 47. var c128 complex128 48. fmt.Printf("c64: %v, c128: %v\n", c64, c128) // 实数、虚数的默认值都为0 49. c64 = 1.12345678 + 1.12345678i 50. c128 = 2.1234567890123456 + 2.1234567890123456i 51. fmt.Printf("c64: %v, c128: %v\n", c64, c128) // 输出:c64: (1.1234568+1.1234568i), c128: (2.1234567890123457+2.1234567890123457i) 52. 53. // 字符型 54. var b byte // uint8 别名 55. var r1, r2 rune // uint16 别名 56. fmt.Printf("b: %v, r1: %v, r2: %v\n", b, r1, r2) // 默认值为0 57. b = 'a' 58. r1 = 'b' 59. r2 = '字' 60. fmt.Printf("b: %v, r1: %v, r2: %v\n", b, r1, r2) // 输出:b: 97(ASCII 表示的数), r1: 98(utf-8表示的数), r2: 23383 (utf-8表示的数) 61. 62. b = u8 63. r1 = i32 64. fmt.Printf("b: %v, r1: %v\n", b, r1) // 输出:b: 255, r1: 2147483647 65. 66. // 指针地址 67. var p uintptr 68. fmt.Printf("p: %v\n", p) // 默认值为0 69. p = 18446744073709551615 // 64位系统最大值 70. //p = 18446744073709551616 // 报错:超出最大值 71. fmt.Printf("p: %v\n", p) 72. }