英文:
Go: converting string to float using strconv.ParseFloat returns 0
问题
我有以下代码:
reader := bufio.NewReader(os.Stdin)
fmt.Print("room: width x length: ")
inStr, _ := reader.ReadString('\n')
result := strings.Split(inStr, "x")
string1, _ := strconv.ParseFloat(result[0], 64)
string2, _ := strconv.ParseFloat(result[1], 64)
fmt.Print(string2)
在最后一个打印语句中,如果我打印string1
,它会返回正确的值,但是如果我尝试打印string2
,无论我在控制台输入什么值,它都返回0。
有人知道为什么会发生这种情况吗?
谢谢!
英文:
I have the following code:
reader := bufio.NewReader(os.Stdin)
fmt.Print("room: width x length: ")
inStr, _ := reader.ReadString('\n')
result := strings.Split(inStr, "x")
string1, _ := strconv.ParseFloat(result[0], 64)
string2, _ := strconv.ParseFloat(result[1], 64)
fmt.Print(string2)
At the last print statement, if i print string1
it returns the right value, but if i try to print string2
it returns 0, no matter what value i input to the console.
Does anyone know why this is happening?
Thanks!
答案1
得分: 6
将代码中的部分进行翻译如下:
将
result := strings.Split(inStr, "x")
替换为
result := strings.Split(strings.TrimSpace(inStr), "x")
由于字符串中包含\n
,所以第二个数组元素也包含它。
此外,我强烈建议在发布此类问题之前查看错误消息。你可以看到下面的代码的结果是strconv.ParseFloat: parsing "23\n": invalid syntax
string2, err := strconv.ParseFloat(result[1], 64)
if err != nil {
fmt.Println(e)
}
英文:
Replace
result := strings.Split(inStr, "x")
with
result := strings.Split(strings.TrimSpace(inStr), "x")
As string contains \n
so your second array element contains it too.
Also I really suggest to look at error messages before posting such kind of questions. You could see strconv.ParseFloat: parsing "23\n": invalid syntax
as result of next code
string2, err := strconv.ParseFloat(result[1], 64)
if err != nil {
fmt.Println(e)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论