diff --git a/eBook/04.5.md b/eBook/04.5.md index 50a1211..8b41b86 100644 --- a/eBook/04.5.md +++ b/eBook/04.5.md @@ -159,8 +159,42 @@ Example 4.9 [casting.go](examples/chapter_4/casting.go) 32 bit int is: 34 16 bit int is: 34 +**格式化说明符** + +在格式化字符串里,`%d` 用于格式化整数(`%x` 和 `%X` 用于格式化 16 进制表示的数字),`%g` 用于格式化浮点型(`%f` 输出浮点数,`%e` 输出科学计数表示法),`%0d` 用于规定输出定长的整数,其中开头的数字 0 是必须的。 + +`%n.mg` 用于表示数字 n 并精确到小数点后 m 位,除了使用 g 之外,还可以使用 e 或者 f,例如:使用格式化字符串 `%5.2e` 来输出 3.4 的结果为 `3.40e+00`。 + +**数字值转换** + +当进行类似 `a32bitInt = int32(a32Float)` 的转换时,小数点后的数字将被丢弃。这种情况一般发生当从取值范围较大的类型转换为取值范围较小的类型时,或者你可以写一个专门用于处理类型转换的函数来确保没有发生精度的丢失。下面这个例子展示如何安全地从 int 型转换为 int8: + + func Uint8FromInt(n int) (uint8, error) { + if 0 <= n && n <= math.MaxUint8 { // conversion is safe + return uint8(n), nil + } + return 0, fmt.Errorf(“%d is out of the uint8 range”, n) + } + +或者安全地从 float64 转换为 int: + + func IntFromFloat64(x float64) int { + if math.MinInt32 <= x && x <= math.MaxInt32 { // x lies in the integer range + whole, fraction := math.Modf(x) + if fraction >= 0.5 { + whole++ + } + return int(whole) + } + panic(fmt.Sprintf(“%g is out of the int32 range”, x)) + } + +不过如果你实际存的数字超出你要转换到的类型的取值范围的话,则会引发 panic(第 13.2 节)。 + +**问题 4.1: int 和 int64 是相同的类型吗?** + ##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0 -要不等到 ***2013 年 5 月 17 日*** 再来看看吧~~ +要不等到 ***2013 年 5 月 20 日*** 再来看看吧~~ 这里还有一些其它的学习资源噢~ @@ -174,8 +208,7 @@ Example 4.9 [casting.go](examples/chapter_4/casting.go) - [Go语言学习园地](http://studygolang.com/) - [Golang中国](http://golang.tc) -**格式化说明符** - +###4.5.2.2 复数 ##链接 - [目录](directory.md)