Golang中打印浮点数时为什么会出现%符号?
Golang中打印浮点数时为什么会出现%符号? 嗨,我使用的是搭载M1芯片的MacBook Pro笔记本电脑。如下所示,当我不使用“\n”时,打印结果中会出现一个“%”符号;而当我使用“\n”时,则不会打印出“%”符号。
chap3 % cat main.go
package main
import "fmt"
func main() {
fmt.Printf("%g", 2.332)
}
chap3 % go run main.go
2.332%
chap3 % vim main.go
chap3 % cat main.go
package main
import "fmt"
func main() {
fmt.Printf("%g\n", 2.332)
}
chap3 % go run main.go
2.332
chap3 % go version
go version go1.19.2 darwin/arm64
是我做错了什么,还是遗漏了某些细节?
更多关于Golang中打印浮点数时为什么会出现%符号?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
你好 @skillian,感谢你的回复。你说得对。我在这里更新一下,这样如果其他人遇到类似的问题,可以在这里找到答案。
更多关于Golang中打印浮点数时为什么会出现%符号?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
请忽略上面的问题。
%是由 zsh 插入的。当我切换到 bash 时,我得到了预期的输出。
package main
import "fmt"
func main() {
fmt.Printf("%g\n", 2.332)
}
bash-3.2$ go run main.go
2.332bash-3.2$ vim main.go
bash-3.2$ go run main.go
2.332
bash-3.2$
这是终端行为,不是Go语言的问题。当程序输出没有以换行符结束时,某些终端(如zsh)会显示一个%符号来指示行尾。
你的代码没有错误,两种写法都是正确的:
// 没有换行符 - 终端可能显示%
fmt.Printf("%g", 2.332)
// 有换行符 - 正常显示
fmt.Printf("%g\n", 2.332)
// 或者使用Println自动添加换行
fmt.Println(2.332)
这是终端的视觉提示,表示输出行不完整。在zsh中,这个%符号实际上不属于程序输出,只是终端的标记。你可以通过以下方式验证:
package main
import (
"fmt"
"os"
)
func main() {
// 将输出重定向到文件查看实际内容
fmt.Fprintf(os.Stdout, "%g", 2.332)
}
运行后检查文件内容,不会包含%符号。
在bash终端中,相同情况会显示不同的提示符(通常是$)。这是终端特性,与Go语言无关。


