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

使用Golang中的ParseFloat将字符串输入转换为float64,go,parsefloat,Go,Parsefloat,我刚刚开始学习Go,我正在尝试将字符串从标准输入转换为float64,以便对输入值执行算术运算 无论输入值如何,输出都返回“0英尺转换为米等于0米”。在对输入调用ParseFloat后,我无法理解为什么值为零 如果有人能告诉我为什么会发生这种情况,我将不胜感激 const conversion float64 = 0.3048 func feetToMeters (feet float64) (meters float64) { return feet * conversion } fu

我刚刚开始学习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)
}

问题是您试图解析
“x.x\n”
,例如:
1.8\n
。这将返回一个错误:
strconv.ParseFloat:parsing“1.8\n”:无效语法
。您可以执行
strings.TrimSpace
功能,或将
feet[:len(feet)-1]
转换为删除
\n
字符

使用
strings.TrimSpace()
(您需要导入
strings
package):

脚[:len(英尺)-1]:

feetFloat, _ := strconv.ParseFloat(feet[:len(feet)-1], 64)
两种情况下的输出:

10.8 feet converted to meters give you 3.2918400000000005 meters

func main(){fmt.Println(“\n\n此程序将为您将英尺转换为米!\n”)英尺:=“35”feetFloat,:=strconv.ParseFloat(英尺,64)米:=feettomers(feetFloat)fmt.Printf(“%v英尺转换为米,给您%v米”,feetFloat,米)}
我对此进行了修改,它给出了正确的答案。问题应该出在读者身上。如果
fmt.Println(feet)
,会发生什么?处理reader.ReadString和strconv.ParseFloat返回的错误。这些错误可能提供了一些关于这个问题的见解。谢谢@jonathanGB,我现在意识到它也在打印一个新行字符。@XyMcXface谢谢你的建议。接下来我必须学习如何处理错误,以避免进一步的头痛!谢谢你,托尼,我甚至没有想到字符串中有一个新行字符。我感谢你给我两个解决方案!太空是生命的救星。我以为ParseFloat会处理这个问题。:)
10.8 feet converted to meters give you 3.2918400000000005 meters