【问题标题】:Converting string input to float64 using ParseFloat in Golang在 Golang 中使用 ParseFloat 将字符串输入转换为 float64
【发布时间】:2016-08-04 21:48:31
【问题描述】:

我刚开始学习 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\nThis program will convert feet to meters for you!\n") feet := "35" feetFloat, _ := strconv.ParseFloat(feet, 64) meters := feetToMeters(feetFloat) fmt.Printf("%v feet converted to meters give you %v meters",feetFloat,meters) } 我对此进行了修改,它给了我正确的答案。问题应该出在读者身上。如果你fmt.Println(feet) 会发生什么?
  • 处理 reader.ReadString 和 strconv.ParseFloat 返回的错误。这些错误可能会提供有关该问题的一些见解。
  • 谢谢@jonathanGB,我现在意识到它也在打印一个换行符。
  • @XyMcXface 谢谢你的建议。接下来我将不得不学习处理错误以避免进一步的头痛!

标签: go parsefloat


【解决方案1】:

问题是您尝试解析"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

【讨论】:

  • 谢谢托尼,我什至没有想到字符串中有换行符这一事实。感谢您给我两个解决方案!
  • TrimSpace 是救生员。我认为 ParseFloat 会处理这个问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 2019-05-03
  • 2017-01-19
  • 1970-01-01
相关资源
最近更新 更多