我正在解析数组中的字符串,并在解析字符串时显示进度。这是我的逻辑,但是对于小于10的输入,它不会缩放。
在100 * i /(lineLen-1)函数的初始部分已经处理了除以零
progress := 0
for i:= 0; i<lineLen;i++ {
//.. lineLen = array length
//.....String processing...
if (100*i/(lineLen-1)) >= progress {
fmt.Printf("--%d%s--", progress, "%")
progress += 10
}
}
答案 0 :(得分:1)
我知道您需要将所有百分比降至10的倍数。
您可以尝试以下内容。
lineLen := 4
progress := 0
for i := 0; i < lineLen; i++ {
// Rounding down to the nearest multiple of 10.
actualProgress := (100 * (i+1) / lineLen)
if actualProgress >= progress {
roundedProgress := (actualProgress / 10) * 10
// Condition to make sure the previous progress percentage is not repeated.
if roundedProgress != progress{
progress = roundedProgress
fmt.Printf("--%d%s--", progress, "%")
}
}
}
答案 1 :(得分:1)
查看https://play.golang.org/p/xtRtk1T_ZW(下面转载的代码):
func main() {
// outputMax is the number of progress items to print, excluding the 100% completion item.
// There will always be at least 2 items output: 0% and 100%.
outputMax := 10
for lineLen := 1; lineLen < 200; lineLen++ {
fmt.Printf("lineLen=%-3d ", lineLen)
printProgress(lineLen, outputMax)
}
}
// Calculate the current progress.
func progress(current, max int) int {
return 100 * current / max
}
// Calculate the number of items in a group.
func groupItems(total, limit int) int {
v := total / limit
if total%limit != 0 {
v++
}
return v
}
// Print the progress bar.
func printProgress(lineLen, outputMax int) {
itemsPerGroup := groupItems(lineLen, outputMax)
for i := 0; i < lineLen; i++ {
if i%itemsPerGroup == 0 {
fmt.Printf("--%d%%--", progress(i, lineLen))
}
}
fmt.Println("--100%--")
}
如果需要,您可以使用https://play.golang.org/p/aR6coeLhAk对outputMax
和lineLen
的各种值执行循环,以查看您喜欢的outputMax
的值(8 <= outputMax < 13
对我来说最好看)。默认情况下,进度条的输出处于禁用状态,但您可以在main
。