3 回答
TA贡献1790条经验 获得超9个赞
该fmt软件包没有直接的解决方案。
但是您可以使用正则表达式删除末尾的点和零:
r, _ := regexp.Compile(`\.?0*$`)
fmt.Printf("%s%%\n", r.ReplaceAllString(fmt.Sprintf("%.2f", 100*(value/total)),""))
奖励:相同的正则表达式适用于任意数量的尾随零。
旁注:您将以50.0041与 相同的方式显示50,这可能有点误导。
TA贡献1873条经验 获得超9个赞
没有办法在内部fmt使用例如另一个标志或您拥有的东西来做到这一点。你必须自己写出逻辑。你可以这样做:
var final string
doubledecimal := fmt.Sprintf("%.2f", 100*value/total)
if doubledecimal[len(doubledecimal)-2:] == "00" {
final = doubledecimal[:len(doubledecimal)-3]
} else {
final = doubledecimal
}
fmt.Printf("%s%%\n, final)
您可以类似地使用strings.Split分割小数点并从那里开始工作。
您甚至可以将其调整50.10%为50.1%.
doubledecimal := fmt.Sprintf("%.2f", 100*value/total)
// Strip trailing zeroes
for doubledecimal[len(doubledecimal)-1] == 0 {
doubledecimal = doubledecimal[:len(doubledecimal)-1]
}
// Strip the decimal point if it's trailing.
if doubledecimal[len(doubledecimal)-1] == "." {
doubledecimal = doubledecimal[:len(doubledecimal)-1]
}
fmt.Printf("%s%%\n", doubledecimal)
TA贡献1834条经验 获得超8个赞
一种方法可能是使用 if 语句控制打印输出,即如果结果可以被 1 整除 (result%1 == 0),则将结果打印到没有小数位。否则像上面所做的那样打印到 .2f。不确定是否有更短的方法来做到这一点,但我认为这应该可行。
- 3 回答
- 0 关注
- 157 浏览
添加回答
举报