Go语言strconv.FormatFloat参数含义及货币格式化问题咨询
strconv.FormatFloat(f, 'E', -1, 64)
strconv.FormatFloat参数问题解答
1. fmt参数的作用
fmt参数用于指定浮点数转字符串的格式风格,不同字符对应不同规则:
'b':二进制指数表示法'e'/'E':十进制指数表示(小写/大写e)'f'/'F':普通十进制表示(无指数)'g'/'G':自动选择e/f(或E/F)中更简洁的格式,自动去除末尾无意义的0'x'/'X':十六进制表示法
2. 'g'和'G'的区别
'g':使用指数表示时显示小写e,同时会去掉末尾的0和多余的小数点'G':使用指数表示时显示大写E,同样会去掉末尾的0和多余的小数点
对于你处理货币金额的场景,二者都能满足“小数位数尽可能少”的需求,具体选哪个看你对指数符号大小写的偏好。
3. prec=-1的作用
prec参数控制格式化后的精度:
- 对
'e'/'E'/'f'/'F':表示小数点后的位数 - 对
'g'/'G':表示总的有效数字位数
当prec设为-1时,会使用最少的必要位数来表示浮点数,保证字符串能无歧义还原为原数值,同时不会有多余的无效数字。
货币金额处理建议
你需要保留2位小数或尽可能少的位数(比如整数金额显示100而非100.00,非整数显示100.5或100.50),可以这么做:
import "math" import "strconv" // 先四舍五入到2位小数,规避浮点数精度误差 rounded := math.Round(f * 100) / 100 // 自动去除末尾无意义的0 result := strconv.FormatFloat(rounded, 'g', -1, 64)
如果要求必须统一显示2位小数(比如100要显示为100.00),则用'f'格式,prec设为2:
result := strconv.FormatFloat(f, 'f', 2, 64)
内容的提问来源于stack exchange,提问作者clarkk
相关产品推荐
相关产品推荐

