Go语言班级男女占比计算程序结果异常,求原因与解决办法
Go程序计算班级性别占比错误的成因与解决方法
问题成因
- 内置
print函数输出格式缺陷:Go的内置print函数并非为格式化输出设计,对浮点数会默认采用科学计数法格式输出,且会附带额外符号标记,导致出现+5.000000+001这种异常显示(实际是5e+01即50的错误呈现形式)。 - 变量覆盖问题:计算占比时直接将结果赋值给原始人数变量
mujeres和hombres,虽本次输入未影响结果,但后续若需使用原始人数会导致数据丢失,属于不良编程习惯。 - import语法错误:代码中
import { "fmt" }不符合Go语法规范,正确写法应为import ("fmt"),该错误会导致编译失败,推测是输入时的笔误。
解决方法
- 替换为
fmt.Printf进行格式化输出:利用格式化控制符指定浮点数的输出格式,避免科学计数法,同时正确输出百分号。 - 新增变量存储占比结果:保留原始人数变量,让代码逻辑更清晰,避免数据覆盖。
- 修正import语法:将错误的花括号改为圆括号。
修正后的代码
package main import ("fmt") var total, mujeres, hombres float64 func main() { fmt.Printf("Número de mujeres: ") fmt.Scanln(&mujeres) fmt.Printf("Número de hombres: ") fmt.Scanln(&hombres) total = mujeres + hombres // 用新变量存储占比结果 porcentajeMujeres := (mujeres / total) * 100 porcentajeHombres := (hombres / total) * 100 // 格式化输出,%.0f表示输出整数形式,%%转义输出百分号 fmt.Printf("En el salón de clases hay %.0f%% de mujeres y %.0f%% de hombres\n", porcentajeMujeres, porcentajeHombres) }
说明
- 若需要保留小数,可将
%.0f改为%.2f(保留两位小数); - 输入50和50时,输出会变为
En el salón de clases hay 50% de mujeres y 50% de hombres,符合预期。
内容的提问来源于stack exchange,提问作者JeanCarlo Alvarado
相关产品推荐
相关产品推荐

