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

efe*_*ero 2 parsefloat go

我刚刚开始学习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)
}
Run Code Online (Sandbox Code Playgroud)

Ton*_*ena 9

问题是你试图解析"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)
Run Code Online (Sandbox Code Playgroud)

feet[:len(feet)-1]:

feetFloat, _ := strconv.ParseFloat(feet[:len(feet)-1], 64)
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出:

10.8 feet converted to meters give you 3.2918400000000005 meters
Run Code Online (Sandbox Code Playgroud)