Golang中如何在fmt.Printf中打印`%`符号

Golang中如何在fmt.Printf中打印%符号 我有以下代码:

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello, playground")

	h := 5
	r := 3
	fmt.Printf("\n%v / %v = %v ", h, r, h/r)
	fmt.Printf("\n%v % %v = %v ", h, r, h%r)
}

但输出是:

Hello, playground

5 / 3 = 1 
5 %v = 3 %!(EXTRA int=2)

第一行没问题,但第二行不对,因为它没有转义 % 符号。我该如何修复它?


更多关于Golang中如何在fmt.Printf中打印`%`符号的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

非常感谢。

更多关于Golang中如何在fmt.Printf中打印`%`符号的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


根据 fmt 包 的文档:

%% 一个百分号字面量;不消耗任何值

如何修复它,只需修改行 新 => fmt.Printf("\n%v %% %v = %v ", h, r, h%r) 而不是 旧 => fmt.Printf("\n%v % %v = %v ", h, r, h%r)

fmt.Printf("\n%v %% %v = %v ", h, r, h%r)

在Go语言的fmt.Printf中,要打印字面量的%符号,需要使用双百分号%%进行转义。

以下是修复后的代码:

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello, playground")

	h := 5
	r := 3
	fmt.Printf("\n%v / %v = %v ", h, r, h/r)
	fmt.Printf("\n%v %% %v = %v ", h, r, h%r)
}

输出结果:

Hello, playground

5 / 3 = 1 
5 % 3 = 2

解释:

  • %%会被解析为单个%字符输出
  • 在格式字符串中,%是格式说明符的起始字符,所以当需要打印字面量的%时,必须使用%%进行转义
  • 其他需要转义的情况也类似,比如要打印\需要使用\\

更多示例:

package main

import "fmt"

func main() {
	// 打印百分比
	fmt.Printf("完成进度: %d%%\n", 75)  // 输出: 完成进度: 75%
	
	// 在复杂格式中使用
	fmt.Printf("折扣: %.1f%% off\n", 25.5)  // 输出: 折扣: 25.5% off
	
	// 多个百分号
	fmt.Printf("%%s 格式符用于字符串: %%s\n")  // 输出: %s 格式符用于字符串: %s
}
回到顶部