FormatInt 仅用于 int64 的进制转换,不支持浮点、千分位、填充或本地化;需显式类型转换,base 限于 2/8/10/16,无大小写控制,十六进制大写需手动转。

FormatInt 不是通用数值格式化函数,它只处理有符号整数(int64),且不支持小数、千位分隔、宽度填充或本地化——用错场景会直接编译失败或逻辑出错。
FormatInt 只接受 int64 和进制基数两个参数
它定义在 strconv 包里,签名是 func FormatInt(i int64, base int) string。这意味着:
- 传入的整数必须先显式转成
int64,比如int64(myInt);int在 32 位系统上是int32,直接传会报错 -
base只能是 2、8、10、16(对应二进制、八进制、十进制、十六进制),传 10 以外的值不会报错但结果不符合直觉(比如base=12会按十二进制算,但字母表不标准) - 没有负号控制、前导零开关、大小写选项(十六进制默认小写,
FormatInt本身不提供大写变体)
想转 float 或带小数的数字?别用 FormatInt
FormatInt 对 float64、int32、uint64 等类型完全无效。常见错误包括:
- 误把
math.Round(x)结果直接喂给FormatInt:返回的是float64,必须先转int64 - 用
FormatInt(int64(myFloat), 10)截断小数而非四舍五入:它只是强制类型转换,不执行任何舍入逻辑 - 需要科学计数法或固定小数位时,应换用
fmt.Sprintf("%.2f", x)或strconv.FormatFloat
十六进制输出要大写?得自己处理
FormatInt(255, 16) 返回 "ff",没有内置大写开关。如果需要 "FF",只能手动转换:
立即学习“go语言免费学习笔记(深入)”;
str := strconv.FormatInt(255, 16) str = strings.ToUpper(str) // 需 import "strings"
注意:strings.ToUpper 对非 ASCII 字符安全,但纯十六进制字符串里只有 a–f,所以够用;若追求极致性能且确定输入范围,也可用查表或位运算,但绝大多数场景没必要。
真正容易被忽略的是:Go 的整数类型体系严格,FormatInt 是“窄接口”——它不负责类型推导、不隐式转换、不处理浮点语义。选它,就等于主动承担类型对齐责任;想省事,fmt.Sprint 或 fmt.Sprintf 更灵活,只是少了 strconv 系列的零分配优势。


















