使用 ParseFloat 在 Golang 中将字符串输入转换为 float64

13

我刚开始学习Go语言,正在尝试将标准输入的字符串转换为float64类型,以便对输入值执行算术运算。

无论输入值是什么,输出都会返回“0英尺转换为米得到0米”。我无法弄清楚在调用ParseFloat函数后为什么值为零。

如果有人能指出这是为什么,我将不胜感激。

const conversion float64 = 0.3048

func feetToMeters (feet float64) (meters float64) {
  return feet * conversion
}

func main(){
  fmt.Println("\n\nThis program will convert feet to meters for you!\n")

  reader := bufio.NewReader(os.Stdin)
  fmt.Println("Enter feet value: \n")
  feet, _ := reader.ReadString('\n')

  feetFloat, _ := strconv.ParseFloat(feet, 64)

  meters := feetToMeters(feetFloat)

  fmt.Printf("%v feet converted to meters give you %v meters",feetFloat,meters)
}

func main(){ fmt.Println("\n\n这个程序将为您把英尺转换成米!\n") feet := "35" feetFloat, _ := strconv.ParseFloat(feet, 64) meters := feetToMeters(feetFloat) fmt.Printf("%v 英尺转换成米为 %v 米",feetFloat,meters) } 我修改了这个程序,现在它给出了正确的答案。问题可能出在读取器上。如果您执行 fmt.Println(feet) 会发生什么? - jonathanGB
5
处理从 reader.ReadString 和 strconv.ParseFloat 返回的错误。这些错误可能会提供关于问题的一些见解。 - Charlie Tumahai
1
谢谢@jonathanGB,我现在意识到它也打印了一个新行字符。 - efettero
@XyMcXface 谢谢你的建议。我接下来得学习如何处理错误,以避免更多的麻烦! - efettero
1个回答

22
问题是您尝试解析"x.x\n",例如:1.8\n。这会返回一个错误:strconv.ParseFloat: parsing "1.8\n": invalid syntax。您可以使用strings.TrimSpace函数或将feet[:len(feet)-1]转换为删除\n字符。
使用strings.TrimSpace()(需要导入strings包):
feetFloat, _ := strconv.ParseFloat(strings.TrimSpace(feet), 64)

feet[:len(feet)-1]中:

feetFloat, _ := strconv.ParseFloat(feet[:len(feet)-1], 64)

两种情况下的输出:

10.8 feet converted to meters give you 3.2918400000000005 meters

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - efettero
TrimSpace是一个救命稻草。我以为ParseFloat会处理它。 :) - Hamza Anis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接